В настоящее время я использую AFNetworking в одном из моих iPhone-приложений. Это действительно удобная библиотека для асинхронных вызовов. Однако я столкнулся с ситуациями в своем приложении, где мне нужно получить данные с сервера, чтобы двигаться вперед. Поэтому я решил, что так жду ответа.Синхронные вызовы AFNetworking
MyAFNetworkClient *httpClient = [MyAFNetworkClient sharedClient];
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:path parameters:nil];
__block int status = 0;
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
@throw error.userInfo;
status = 2;
NSLog(@"Error... Status Code 2");
}];
[httpClient enqueueHTTPRequestOperation:operation];
[httpClient.operationQueue waitUntilAllOperationsAreFinished];
while (status == 0)
{
// run runloop so that async dispatch can be handled on main thread AFTER the operation has
// been marked as finished (even though the call backs haven't finished yet).
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate date]];
}
С помощью этой части кода я могу дождаться ответа с сервера и продолжить движение дальше. Это действительно помогло решить мою проблему, однако, не уверен, что это хороший способ совершать звонки. Если это так, есть хороший принцип дизайна, где я могу сохранить общий код и использовать его в моем приложении.
Спасибо
Я думаю, что ответы/комментарии здесь иллюстрируют основанный на мнениях характер этого вопроса. –