0

我在这样的 for 循环中启动多个 AFJSONRequestOperation:

for(NSString *obj in collection)

operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

         //NSLog(@"success");      

        }
        failure:nil];
[operation start];

如何确定我的所有操作都已完成?

我猜这些操作已添加到operationQueueAFHTTPClient 中,但我不确定。不管怎样,我不知道如何访问正在使用的 AFHTTPClient 的实例。

4

2 回答 2

0

在循环之外,定义一个计数器(int),它最初设置为集合元素的数量。在每个完成块中(这明确意味着,在成功和失败处理程序中!)将计数器减一。如果它达到零,则所有请求都已完成。

警告:我不完全确定,但据我所知,当它被取消AFJSONRequestOperation时不会调用处理程序块。请查阅文档。(就个人而言,我认为这是一个设计问题 - 但唉......)

这个问题有更优雅的解决方案。但是,这将需要一组更专业的类和工具来帮助实现常见的异步设计模式,比如这个。

于 2013-07-16T08:26:47.873 回答
0

添加AFJSONRequestOperation对象NSMutableArray(我operations在这种情况下使用)而不是开始每个对象,然后使用方法:

AFHTTPClient *client = [[AFHTTPClient alloc] initWithURL:baseURL];
[client enqueueBatchOfHTTPRequestOperations:operations progressBlock:nil completionBlock:^(NSArray *operations) {
    // called when all operations have finished.
}];
于 2013-07-16T11:11:09.377 回答