Как ставить запросы в очередь, когда базовая структура не поддерживает организацию очередей? - PullRequest
0 голосов
/ 16 февраля 2011

Я чувствую, что мой вопрос действительно n00b;извините, если я не произнесу это ясно: /

В моем проекте я использую стороннюю платформу, которая извлекает некоторые данные для меня, используя асинхронный NSURLRequests (RESTful API)Когда данные получены и готовы, вызывается функция делегата didReceiveResponse.В случае ошибки вызывается didFailWithError.

Проблема заключается в том, что инфраструктура не может ставить запросы в очередь, поэтому, если я вызываю методы запроса последовательно, я получаю ответ только для последнего выданного запроса.

Теперь проблема в том, что я не могу изменить код фреймворка.Учитывая это, есть ли способ обойти эту проблему?Примерно так: для набора запросов запрос n + 1 не выдается до тех пор, пока запрос n не будет завершен (вызван didReceiveResponse или didFailWithError);Кроме того, когда последний запрос в наборе закончен, я получаю своего рода уведомление.В идеале решение должно поддерживаться как для iOS3, так и для iOS4.

1 Ответ

2 голосов
/ 16 февраля 2011

Похоже, что ваш единственный вариант - контролировать метод, которым вы запускаете запросы.С этой целью я бы абстрагировал идею желаемого запроса в собственный объект или фабрику: назовите его Command, или SingleRequestFactory, или как угодно.Удерживайте эти объекты в массиве, и когда вы получите didReceiveResponse или didFailWithError, удалите из очереди следующий Command и используйте его для создания следующего запроса, который вы передаете своей сторонней платформе.Если вы получите didReceiveResponse или didFailWithError и очередь пуста, опубликуйте ваше уведомление.

Вероятно, было бы лучше создать объект, который выполняет всю эту логику самостоятельно, так что вашviewcontrollers / все, что выбрасывает эти запросы, может просто сказать объекту поставить в очередь Command без удержания самой очереди.

...