Индикатор выполнения при загрузке - PullRequest
3 голосов
/ 22 марта 2012

У меня есть приложение с загрузкой в ​​приложении. Я успешно загружаю mp3 файлы следующим образом:

NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]];
[data1 writeToFile:filePath atomically:YES];

Но действительно большая пауза во время выполнения этого кода. Как я могу определить ход загрузки и отобразить ее с помощью индикатора выполнения?

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Проблема в том, что dataWithContentsOfURL: является блокирующим вызовом.Это означает, что он заблокирует поток, в котором он запущен.

У вас есть несколько вариантов, чтобы исправить это, и лучше всего использовать NSURLConnection.

* 1006.* С помощью NSURLConnection вы можете выполнять запрос на загрузку асинхронно, что не позволит ему заблокировать основной поток.

Вы должны использовать методы NSURLConnectionDelegate, чтобы получать информацию о ходе загрузки, сохранить ееданные и быть информированным об успехе или неудаче.

Пожалуйста, ознакомьтесь с документацией для Системы загрузки NSURL .

Альтернативой использованию NSURLConnection является упаковка вашейтекущий код с некоторыми вызовами GCD с использованием очередей отправки.Это не позволит вызову заблокировать ваш пользовательский интерфейс, но не позволит вам определить ход выполнения - для этого вам все равно нужно будет использовать NSURLConnection.

1 голос
/ 22 марта 2012

Вы действительно должны взглянуть на ASIHTTPRequest и особенно этот раздел

Он обеспечивает обратные вызовы для отслеживания ваших загрузок, асинхронных и синхронизированных соединений, очередей, кэширования и множества других полезных вещей.

...