Как скачивать файлы в локальную директорию приложения из Интернета по заданному URL.
Информация
Весь описанный ниже код использовался для написания приложения "TV сериалы/TV series". Авторами кода являются Кононов Алексей/Kononov Aleksey и компания Apple. Перепечатка на ресурсах, отличных от iGuides.ru, разрешена только с разрешения автора (Кононов Алексей/).
Содержание 1. Класс URLGetController и протокол URLGetControllerDelegate. 2. Реализация метода startDownloadFromUrl. 3. Получение данных. 4. Использование URLGetController. 5. Выражение благодарности автору данной статьи.
1. Класс URLGetController и протокол URLGetControllerDelegate.
И так, у нас есть описание класса, теперь рассмотрим, что у него внутри. 1.1 Протокол URLGetControllerDelegate. Тут все просто. Класс-делегат должен реализовать нужные ему методы. А именно: 1)
- вызывается, когда загрузка файла завершена с ошибкой.
1.2 Атрибуты класса. Нас будет больше всего интересовать _filePath и _fileName. Все остальные являются служебными. :icon_exclaim: После создания объекта класса URLGetControllerDelegate не забудьте указать на объект-делегат. Для этого нужно сохранить указатель в атрибуте delegate, который доступен для записи извне.
1.3 Методы класса. 1, 2) filePath и fileName - их назначение очевидно. 3)
- (void)startDownloadFromUrl:(NSString *)url;
- передаём адрес, по которому надо скачать файл, и просим начать скачивание. (Перед тем, как вызвать данный метод, не забудьте определить объект-делегат).
2. Реализация метода startDownloadFromUrl. Я думаю, я добавил достаточно комментариев к коду, чтобы разобраться в нем. Хочу остановиться только на том, что в данной реализации не проводится никаких проверок на корректность входных данных.
3. Получение данных. Так как класс URLGetController является классом-делегатом для созданного NSURLConnection, то нужно реализовать необходимые методы, для обработки ответов от self.connection. В данной реализации предлагается обрабатывать следующие ответы: 1)
"У делегата вызывается данный метод, когда получен ответ сервера на запрос. В случае HTTP-запроса необходимо проверить [response statusCode] и [response MIMEType] и убедиться в том, что получены верные код ответа и тип файла. В случае FTP-запроса statusCode отсутствует, а тип файла можно определить по его расширению. Поэтому данный метод предлагается пропустить. Также предлагаю Вам ознакомиться с методами [response expectedContentLength] и [response suggestedFilename]. В данном примере в этом нет необходимости."
2)
3)
4)
5) Реализация остальных используемых методов очевидна из их названия.
4. Использование URLGetController. 4.1 Создание и вызов.
4.2 Сохранение скаченного файла в директорию приложения.
5. Выражение благодарности автору данной статьи. С радостью приму Вашу благодарность в качестве высокой оценки моих приложений в AppStore. :crazy0to:
Ответы