Использование NSURLConnection для последовательного выполнения асинхронных запросов - PullRequest
2 голосов
/ 16 января 2012

Я пишу приложение для iPhone, которое взаимодействует с веб-службой RESTful, и мне нужно запросить токен аутентификации для использования со всеми последующими запросами. Я хочу избежать многопоточности, если это возможно, и вместо этого использовать асинхронные методы NSURLConnection, чтобы гарантировать, что основной поток не блокируется (и, таким образом, гарантировать, что пользовательский интерфейс остается отзывчивым).

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

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

Ответы [ 2 ]

4 голосов
/ 16 января 2012

Если вы создаете для iOS 5.0 или более поздней версии, вы можете использовать:

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]

Сделайте ваш следующий звонок в блоке completionHandler:.

1 голос
/ 16 января 2012

Возможно, вы захотите взглянуть на MKNetworkKit .С некоторыми незначительными изменениями вы сможете настроить его так, чтобы он зависал до тех пор, пока токен не вернется, и в этот момент вы можете использовать addHeaders:, чтобы изменить существующие операции в очереди, чтобы включить токен аутентификации.«Замораживание» - одна из главных особенностей МКНК.Это позволяет вам продолжать делать запросы, даже если вы не в сети, и они будут отправлены после установления соединения.

...