ios - 使用 AFNetworking 2.0 分组或批量请求

标签 ios afnetworking afnetworking-2

我正在尝试弄清楚使用 AFNetworking 2.0 对多个 GET 请求进行分组或批处理的最佳做法是什么。所有的 GET 请求都需要在代码可以继续之前完成,但它们不必一个接一个地运行。现在对于单个请求,我正在使用 AFHTTPRequestOperationManager(另请参见此处:Subclass AFHTTPRequestOperationManager?)。

此处描述了一种可能性,使用 dispatch_group:How to batch request with AFNetworking 2? , 但这是针对 AFHTTPSessionManager 的,它仅适用于 iOS7。我的应用程序仍然针对 iOS6,因此我需要使用 AFHTTPRequestOperationManager

使用 dispatch_group 是可行的方法吗?还是 AFNetworking 中内置了一些我忽略了但可以用于此目的的东西?

编辑:仍然不知道正确的方法是什么......例如,我如何使用带有 AFHTTPRequestOperation 的组?

我尝试了以下方法,但最终的 NSLog(“完成搜索”)始终在所有响应出现之前首先显示:

dispatch_queue_t dispatch_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t dispatch_group = dispatch_group_create();

for (Entry *e in self.entries)
{
    dispatch_group_async(dispatch_group, dispatch_queue, ^{
        NSString *queryString = [e getQueryString];         
        NSURL *URL = [NSURL URLWithString: queryString];
        NSURLRequest *request = [NSURLRequest requestWithURL:URL];

        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        operation.responseSerializer = [AFHTTPResponseSerializer serializer];
        operation.completionGroup = dispatch_group;
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"%@", responseObject);
        } failure:nil];

        [operation start];
    });
}

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    NSLog(@"done searching");
});

最佳答案

经过大量尝试,我想出了以下内容,这正是我所需要的。所有 AFHTTPRequestOperation 调用都由单例客户端处理:

dispatch_group_t dispatchGroup = dispatch_group_create();

for (Entry *e in self.entries)
{
    dispatch_group_enter(dispatchGroup);

    MyDBClient *dbClient = [MyDBClient sharedClient];

    [dbClient searchForQuery: queryString
                   withParameters: nil
                       completion: ^(NSData *data, NSError *error) {
                           if (data) {
                               // process data
                           }                               
                           else {
                               // deal with error, if any
                           }                              
                           dispatch_group_leave(dispatchGroup);
                       }];
}

dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^{
  // update UI here
});

客户端中的代码基于我在此处找到的示例代码:http://nsscreencast.com/episodes/91-afnetworking-2-0

我希望这能帮助其他正在努力完成同样目标的人。

关于ios - 使用 AFNetworking 2.0 分组或批量请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846360/

相关文章:

ios - "error: This object is not available in the offline cache"仅在 Parse 后端出现几次

ios - 使用自动布局将 UIButton 添加到自定义单元格

iOS 7 - SplitViewController 详细 View - 自动布局 UITextView 键盘方向更改

objective-c - 在 ViewController 之间切换时 UIProgressView 开始闪烁

afnetworking - AFHTTPRequestOperationManager urlstring 编码和无效参数不满足 : URLString

ios - 在 iOS 中使用 AFNetworking 下载文件

ios - 在 xcode 上调试 Verifone E315 POS Sled

ios - AFNetworking- 发布请求- 向正文添加简单文本

iphone - AFNetworking+UIImage 先下载低分辨率图片

ios - 如何在没有 safari 的情况下完全在应用程序内部打开 url 并获取访问 token ?