2012-04-22 2 views
0

Каким будет наиболее подходящий способ соединения асинхронных NSURLConnections? Например, мне нужно зарегистрировать пользователя с помощью веб-службы. Рабочий процесс будет следующим: Получить регистрационный токен => Использовать токен для регистрации => Получить токен входа => Использовать токен для входа в систему.Как можно связать асинхронные NSURLConnections?

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

ответ

2

Мы сделали ТОЧНО, когда мы построили нашу первую версию SignMeOut для iPhone. Мы создали подкласс NSUrlconnection и дали ему идентификационный тег в connectionDidFinish, который вы могли бы использовать простой коммутатор/регистр с перечислением. Работает отлично - вы можете увидеть весь поток и пример и код в нашем блоге

http://www.isignmeout.com/multiple-nsurlconnections-viewcontroller/

UPDATE

Я изменил подкласс NSURLConnection в гораздо более простой категории. Большая часть использования такой же, но чище, используя один и тот же класс

https://github.com/Shein/Categories

+0

Превосходно! Большое спасибо за то, что нашли время, чтобы опубликовать это. – squarefrog

+0

Рад, что это полезно для других :) дайте мне знать, как это сработает для вас – shein

+0

Так же, как и обновление, попробовал это раньше, отлично работает! Идеальное решение. – squarefrog

1

Вы можете посмотреть connectionDidFinishLoading, чтобы начать другое асинхронное соединение. Для условий, по которым соединение закончилось, вы можете сохранить ссылки на соединения в случае, если ожидается, что другие соединения будут завершены (вероятно, не нужны в вашем случае). Сделайте свой класс следующим образом: NSURLConnectionDelegate и запустите соответствующие соединения в методе делегата connectionDidFinishLoading. Вы также можете использовать метод connectionDidReceiveData: для проверки учетных данных и т. Д., Полученных от службы. Пройдите также через documentation.

+0

Большое спасибо! Как бы вы рекомендовали разделить эти методы? Например, у меня есть два основных сценария. 1) Пользователь регистрируется, что потребует четырех условий, указанных выше, 2) пользователь регистрируется, в котором нам понадобятся только последние два соединения. Будет ли «BOOL isRegistering» iVar или что-то подходящее? – squarefrog

+0

Несомненно, если это вам подходит, то с помощью bools тоже будет хорошо ... – tipycalFlow

1

У вас есть различные варианты:

  • создания очереди, используя изменяемый массив или словарь
  • создать NSOperationQueue вид легко, если вы используете его в сочетании с новым только ios5 API для NSURLConnection
  • сторонние библиотеки, такие как AFNetworking
  • Блок GCD группирует их (трудно для причин NSRunLoop, обратите внимание, в какой нити работает соединение)
+0

OK отлично. Приятно знать все варианты! – squarefrog

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