起初
我有这个如何等到异步调用齐全,包括完成块(AFNetworking)
ZTCAPIClient *api = [ZTCAPIClient sharedClient];
__block BOOL sessionSuccess = NO;
//Get session
[api getPath:@"api-getsessionid.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {
NSMutableDictionary *dict = [self dealWithZTStrangeJSON:JSON];
if ([dict count]) {
NSLog(..something..);
sessionSuccess = YES;
NSLog(@"inside:%u",sessionSuccess);
} else {
NSLog(@"ERROR: Get no session!");
sessionSuccess = NO;
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@",error);
sessionSuccess = NO;
}];
[api.operationQueue waitUntilAllOperationsAreFinished];
NSLog(@"outside:%u",sessionSuccess);
,但我会得到:
outside:0
inside:1
我知道这是异步的原因。 所以我在互联网上搜索,然后我发现这一点:wait until multiple operations executed - including completion block (AFNetworking)
所以我尝试:
ZTCAPIClient *api = [ZTCAPIClient sharedClient];
__block BOOL sessionSuccess = NO;
dispatch_group_t group = dispatch_group_create();
//Get session
dispatch_group_enter(group);
[api getPath:@"api-getsessionid.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id JSON) {
NSMutableDictionary *dict = [self dealWithZTStrangeJSON:JSON];
if ([dict count]) {
NSLog(..something..);
sessionSuccess = YES;
NSLog(@"inside:%u",sessionSuccess);
} else {
NSLog(@"ERROR: Get no session!");
sessionSuccess = NO;
}
dispatch_group_leave(group);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@",error);
sessionSuccess = NO;
dispatch_group_leave(group);
}];
//[api.operationQueue waitUntilAllOperationsAreFinished];
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);
DLog(@"outside:%u",sessionSuccess);
然后我得到什么? 没有输出。
哪里出错?
谢谢你的回答,我认为它也导致了僵局。但是'dispatch_group_wait'后面需要做的事情是登录。登录后,我可以返回YES或NO。但是如果我把这个日志放在成功处理程序的代码或方法中。它将异步运行,因此无法返回。 – Puttin 2013-03-25 02:56:39
我会尝试一些同步代码。谢谢你的帮助。这种情况不应该使用异步代码。 – Puttin 2013-03-25 07:55:35