我正在像这样的for循环中启动多个AFJSONRequestOperation:
for(NSString *obj in collection)
operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//NSLog(@"success");
}
failure:nil];
[operation start];
如何确定我的所有操作都已完成?
我想这些操作是添加到AFHTTPClient中的operationQueue
中的,但我不确定。否则,我不知道如何访问正在使用的AFHTTPClient的实例。
在循环之外,定义一个计数器(int),该计数器最初设置为集合的元素数。在中,每个完成块(明确地说,在成功与失败处理程序中!)将计数器递减一。如果它达到零,则所有请求都已完成。
注意:我不完全确定,但据我所知,AFJSONRequestOperation
不会在被取消时调用处理程序块。请查阅相关文件。(就我个人而言,我认为这是一个设计问题,但唉…)
这个问题有更优雅的解决方案。然而,这将需要一组更专业的类和工具来帮助实现常见的异步设计模式,比如这个。
在NSMutableArray
中添加AFJSONRequestOperation
对象(在本例中我使用的是operations
),而不是启动每个对象,然后使用方法:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithURL:baseURL];
[client enqueueBatchOfHTTPRequestOperations:operations progressBlock:nil completionBlock:^(NSArray *operations) {
// called when all operations have finished.
}];