我的多个AFJSONRequestOperations何时完成?

时间:2013-07-16 08:13:37

标签: iphone ios afnetworking nsoperationqueue afjsonrequestoperation

我在这样的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的实例。

2 个答案:

答案 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.
}];