我目前在我的iPhone應用程序之一使用AFNetworking。這是一個非常方便的庫來進行異步調用。但是,我在我的應用程序中遇到了需要從服務器獲取數據的情況。所以我想通過這種等待回覆的方式。同步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]];
}
有了這段代碼,我可以等待從服務器迴應並能夠繼續進行。它確實似乎解決了我的問題,但是,不確定這是否是撥打電話的好方法。如果是這樣,是否有一個很好的設計原則,我可以保持代碼的通用性,並在我的應用程序中使用它。
謝謝
我認爲這裏的答案/評論說明了這個問題的基於觀點的性質。 –