2014-11-06 76 views
0

一些成功的HTTP請求後,我想在回調中返回totalArray,但只有在所有請求都成功後才返回。在做了一些研究之後,我發現我應該用某種方式使用像Grand Central Disatch或NSLock這樣的東西,但我不確定如何使用它們。我怎樣才能做到這一點?如何從一堆異步HTTP請求中返回組合的對象數組?

+ (void)httpRequestOnParameters:(NSURL*)url parametersArray:(NSArray*)parametersArray success:(Success)success failure:(Failure)failure { 

    NSMutableArray* totalArray = [NSMutableArray new]; 
    for (NSDictionary* parameter in parametersArray) { 
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
     [manager GET:[url absoluteString] 
      parameters:parameter 
      success:^(AFHTTPRequestOperation *operation, id responseObject) { 

       [totalArray addObject:responseObject]; 
      } 
      failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      }]; 
    } 

    success(totalArray); 
} 

回答

1

您可以嘗試在第一次異步調用之前將計數器設置爲0。然後在成功代碼塊中,遞增計數器並放置一個if塊,以檢查計數器何時達到所需數量的異步調用。

counter = 0; 
numAsyncCalls = x; 
array = [ ]; 

asyncCall { 
    mainCode: ... 
    success: counter ++; 
        array.push(callResult); 
        if (counter == numAsyncCalls){ 
        ''Execute desired code on 
        ''populated array[] 
        } 
} 

這有道理嗎?對不起,如果這篇文章看起來很帥,我正在嘗試iPad上的堆棧交換應用。