如何从一堆异步HTTP请求中返回一个对象数组?

时间:2014-11-06 20:58:27

标签: ios objective-c asynchronous afnetworking

在一些成功的HTTP请求之后,我想在回调中返回totalArray,但仅在所有请求成功之后。经过一些研究,我发现我应该以某种方式使用像中央调度或NSLock这样的东西,但我不知道如何使用它们。我怎么能这样做?

+ (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 :(得分: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上试用堆栈交换应用程序。