我在这样的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的实例。
答案 0 :(得分:0)
在循环外部,定义一个计数器(int),该计数器最初设置为集合的元素数。在每个完成块中(明确表示成功和失败处理程序!)将计数器减1。如果它达到零,则所有请求都已完成。
警告:我不完全确定,但据我所知,AFJSONRequestOperation
将在取消时调用处理程序块。请查阅文档。 (就个人而言,我认为这是一个设计问题 - 但唉......)
这个问题有更优雅的解决方案。但是,这需要一组更专业的类和工具来帮助实现常见的异步设计模式,如此。
答案 1 :(得分:0)
在AFJSONRequestOperation
中添加NSMutableArray
个对象(在这种情况下我使用operations
)而不是启动每个对象,然后使用以下方法:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithURL:baseURL];
[client enqueueBatchOfHTTPRequestOperations:operations progressBlock:nil completionBlock:^(NSArray *operations) {
// called when all operations have finished.
}];