Лучшая обработка получения данных с сервера в iPhone - PullRequest
0 голосов
/ 29 февраля 2012

Мне нужно улучшить кодирование. Поэтому я нахожу что-то лучше.

Моя проблема в том, что мне нужно получить данные с сервера из 10 разных URL-адресов, которые имеют изображения 100.

например, мне нужно нажать

http://192.168.11.222/images/a http://192.168.11.222/images/b http://192.168.11.222/images/c http://192.168.11.222/images/d http://192.168.11.222/images/e http://192.168.11.222/images/f http://192.168.11.222/images/g http://192.168.11.222/images/h http://192.168.11.222/images/i

, поэтому abcde - это папкана сервере, содержащем изображения.

В настоящее время я делаю это через NSURLConnectionWithTag, а затем анализирую response.and и сохраняюсь. Есть ли еще лучший способ справиться с этим?мне также нужно показать индикатор выполнения, который в этом случае также сложен.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я бы настроил NSOperationQueue с одной операцией на URL и установил бы, скажем, три одновременных операции.Затем используйте не асинхронный API NSURLConnection для выполнения загрузки.

Для вашего индикатора выполнения, вероятно, достаточно будет обновить прогресс после завершения каждого отдельного файла и выполнять два из них одновременно (или что-то еще),Скорее всего, задержка будет больше, чем половина «прогресса» в любом случае, поэтому, если вы не начнете пытаться предсказать время пинга, индикатор выполнения, основанный на фактически переданных байтах, будет недостаточно точным (если это не очень большие изображения).

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

По сути, вы хотите добавить «блок» кода в очередь операций для каждого загружаемого URL-адреса, и очередь выяснит, как загрузить каждый из них, а затем, когда каждый отдельный блок кода будет завершен, он выполнит другой блок на главном.поток (dispatch_sync(dispatch_get_main_queue(), ^{ ... })) для обновления индикатора выполнения.

0 голосов
/ 29 февраля 2012

Если вы собираетесь писать код, связанный с сетью, в своем приложении, я рекомендую взглянуть на AFNetworking , это оболочка сетевого API iOS, уже обеспеченная гораздо меньшими хлопотами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...