0

我在這裏有一段代碼,它基本上調用了我的servlet(它做的),然後返回結果。但是,如果我添加了同步/阻止部分(請參閱if(isSync)),則完成塊不會被調用,並且整個應用程序在dispatch_group_wait中掛起。如果它有任何區別,則從主線程調用此代碼。AFNetworking完成塊不叫?

// ...More code here 


if(isSync) 
{ 
    dispatch_group_enter(group); 
} 

AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:REQ]; 
op.responseSerializer = [AFJSONResponseSerializer serializer]; 

[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSDictionary *result = responseObject; 
    NSLog(@"JSON responseObject: %@ ", result); 
    if(isSync) 
    { 
     dispatch_group_leave(group); 
    } 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", [error localizedDescription]); 
    if(isSync) 
    { 
     dispatch_group_leave(group); 
    } 
}]; 
[op start]; 
if(isSync) 
{ 
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 
} 

我錯過了什麼嗎?

+0

這是愚蠢的錯誤,回到它後一段時間我發現問題 - .-。我沒有在所有x.x上使用組異步 – CyberMew

回答

0

我有完全相同的問題,並花了我一段時間才意識到操作運行特定隊列(默認隊列)中的塊。

也就是說,假設您在同一隊列中運行您的代碼,如果您使用dispatch_group_wait阻止/停止正在運行的代碼,則成功和失敗塊將永不運行。要解決此問題,您可以將完成隊列和組添加到操作中,使操作在另一個隊列中運行該塊。下面的代碼是快速的,不確定在objective-c中它是否相同。

operation.completionQueue = queue; 
operation.completionGroup = postGroup;