我目前在我的一个 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]];
}
使用这段代码,我可以等待服务器返回的响应并继续进行。它似乎确实解决了我的问题,但是,不确定这是否是拨打电话的好方法。如果是的话,是否有一个好的设计原则可以让我保持代码通用并在我的应用程序中使用它。
谢谢