在一些成功的 HTTP 请求之后,我想在回调中返回 totalArray,但只有在所有请求都成功之后。在做了一些研究之后,我发现我应该以某种方式使用 grand central dispatch 或 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);
}
最佳答案
您可以尝试在第一次异步调用之前使用设置为 0 的计数器。然后在成功代码块中,增加计数器并放置一个 if block ,检查计数器何时达到所需的异步调用数量。
counter = 0;
numAsyncCalls = x;
array = [ ];
asyncCall {
mainCode: ...
success: counter ++;
array.push(callResult);
if (counter == numAsyncCalls){
''Execute desired code on
''populated array[]
}
}
这有意义吗?抱歉,如果这篇文章看起来很简陋,我正在 iPad 上尝试堆栈交换应用程序。
关于ios - 如何返回由一堆异步 HTTP 请求组合而成的对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789268/