Objective-C ожидает завершения асинхронного HTTP-запроса - PullRequest
1 голос
/ 30 января 2012

Я использую следующий код для выполнения HTTP-запроса:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

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

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

Редактировать: Моя основная проблема заключается в том, что делегаты вызываются после кода, который использует полученные данные.

Ответы [ 2 ]

2 голосов
/ 30 января 2012

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

, не забывайте, что со времен iOS 5 NSURLConnectionDelegate (и DownloadDelegate) изменились.

0 голосов
/ 30 января 2012

Загрузите библиотеку AFNetworking и используйте ее для своих подключений. У него есть блочные методы, которые (для меня) гораздо «чище» для использования вместо методов делегатов. AFNetworking доступен на iOS 4 и выше.

https://github.com/AFNetworking/AFNetworking

Прочтите этот пост о некоторых основах AFNetworking:

http://engineering.gowalla.com/2011/10/24/afnetworking/

...