2013-11-10 5 views
0

У меня есть некоторые сомнения относительно того, какой из них является лучшим способом решить эту проблему.Операция AFNetworking внутри NSOperation

В моем приложении мне нужно разобрать xml из ~ 20 разных URL-адресов. Я хочу поставить логику внутри NSOperationQueue, поэтому я могу разделить задачу синхронизации на более мелкие задачи, которые я могу добавить в очередь. Поскольку эта задача должна подключаться к URL-адресу, и я использую AFNetworking, как мне это сделать?

| 
| 
|------- => Start my OwnXMLOperation 
|  | 
|  | 
|  | ------- => Start the AFNetworking operation inside my OwnXMLOperation 
|  |  | 
|  x  | 
|    | => Download finish, starting the parser inside the success block 
|    | 
|------- => Anot | her OwnXMLOperation starts without the previous one is finished. 
|  |  | 
|  |  | 
|  |--------|-------- 
|  |  |  | 
|  x  x => The | parser of the first operation finished. 
|       | 
|       |------- => Start the AFNetworking operation inside my OwnXMLOperation 

Как я могу избежать этой уродливой карты NSOperation? Я думал о том, чтобы переопределить операцию AFNetworking, чего я даже не знаю, возможно ли это.

Заранее спасибо

+0

Какую цель вы ставите перед собой? Выполняется только одна операция за раз? Какова цель вашей XML-операции? – Wain

+0

Я хочу добавить в очередь столько задач, сколько у меня есть xml, который будет загружать, анализировать и сохранять некоторые объекты в базовой модели данных. – Juangcg

+0

Почему бы просто не просто добавить операции AFNetworking (и установить максимальное количество совпадений в очереди)? – Wain

ответ

2

оба не с вашей собственной работой XML, операции AFNetworking и очередь могут обеспечить все управление очередью вам требуется.

Чтобы сохранить порядок вещей, поместите разбор XML в ряд методов (как в классе контроллера, так и в нескольких вспомогательных классах, если хотите). Затем вы можете вызвать эти методы соответствующим образом из блоков успеха AFNetworking.

Обязательно установите максимальный параллельный счет в очереди, если вы собираетесь добавить 20 операций, чтобы вы не наводнили сеть запросами.

+1

+1 Да. Я знаю, что вы знаете это, но для будущих читателей стоит отметить, что нет смысла делать больше, чем несколько параллельных сетевых операций, потому что iOS ограничивает, сколько будет выполняться одновременно (это было пять одновременных сетевых запросов, хотя в iOS 7, I 'm только получить четыре, чтобы запустить одновременно). Если вы инициируете слишком много параллельных запросов, вы без необходимости используете рабочие потоки и рискуете отключить и отключить сетевые запросы (например, в медленной сети). «MaxConcurrentOperationCount» из четырех или пяти разумен, но при этом сохраняется параллелизм. – Rob

Смежные вопросы