Ios 使用AFNetworking 2.0对请求进行分组或批处理

Ios 使用AFNetworking 2.0对请求进行分组或批处理,ios,afnetworking,afnetworking-2,Ios,Afnetworking,Afnetworking 2,我试图找出使用AFNetworking 2.0对大量GET请求进行分组或批处理的最佳实践。在代码继续之前,需要完成所有GET请求,但它们不必一个接一个地运行。现在对于单个请求,我使用的是AFHTTPRequestOperationManager(另请参见此处:) 这里描述了一种可能性,使用dispatch_group:,但这是针对AFHTTPSessionManager,它仅适用于iOS7。我的应用程序仍然以iOS6为目标,因此我需要使用AFHTTPRequestOperationManager

我试图找出使用AFNetworking 2.0对大量GET请求进行分组或批处理的最佳实践。在代码继续之前,需要完成所有GET请求,但它们不必一个接一个地运行。现在对于单个请求,我使用的是
AFHTTPRequestOperationManager
(另请参见此处:)

这里描述了一种可能性,使用dispatch_group:,但这是针对
AFHTTPSessionManager
,它仅适用于iOS7。我的应用程序仍然以iOS6为目标,因此我需要使用
AFHTTPRequestOperationManager

使用调度组是正确的做法吗?或者是我忽略了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
});
客户端中的代码基于我在此处找到的示例代码:

我希望这能帮助其他试图实现同样目标的人