起初
我有這個如何等到異步調用齊全,包括完成塊(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