2

Как скачивать файлы в локальную директорию приложения из Интернета по ...

Nekto
Development Разработка программ для AppStore
Как скачивать файлы в локальную директорию приложения из Интернета по заданному 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)
- (void)controllerDidEndGettingData:(URLGetController *)controller;
- вызывается, когда загрузка файла завершена успешно,
2)
- (void)controller:(URLGetController *)controller didFailWithError:(NSError *)error;
- вызывается, когда загрузка файла завершена с ошибкой.

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)  
- (void)connection:(NSURLConnection *)theConnection didReceiveResponse:(NSURLResponse *)response

Из комментариев компании Apple:
"У делегата вызывается данный метод, когда получен ответ сервера на запрос.
В случае HTTP-запроса необходимо проверить [response statusCode] и [response MIMEType] и убедиться в том, что получены верные код ответа и тип файла.
В случае FTP-запроса statusCode отсутствует, а тип файла можно определить по его расширению. Поэтому данный метод предлагается пропустить.
Также предлагаю Вам ознакомиться с методами [response expectedContentLength] и [response suggestedFilename]. В данном примере в этом нет необходимости."

2)  

3)  

4)

5) Реализация остальных используемых методов очевидна из их названия.

4. Использование URLGetController.
4.1 Создание и вызов.
   
4.2 Сохранение скаченного файла в директорию приложения.


5. Выражение благодарности автору данной статьи.
С радостью приму Вашу благодарность в качестве высокой оценки моих приложений в AppStore. :crazy0to:

Статья подготовлена 28.06.2011.
Раздел: Development Автор: Nekto
28 июня 2011, 16:35

Ответы