NSURLConnection sendAsynchronous 多个请求未执行

NSURLConnection sendAsynchronous multiple requests not executed

我向 Web 服务发送了 10 个 url 请求(在 for in 循环中)

并期望得到 10 JSON 格式的数据作为 return 分别

这是我的代码:

NSArray *reqArray = [10 requests of url inside];
NSMutableArray * saveArray = [prepare to store 10 JSON data in here];
NSInteger counter = [reqArray count];

for (NSURLRequest *request in reqArray) {
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               NSDictionary *result1 = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                               NSDictionary *result2 = [result1 objectForKey:@"keyForValueIWant"];
                               [saveArray addObject:result2];
                            counter -- ;
                               if (counter == 0) {
                                   NSLog(@"all done");

                               }
                           }];

}

completionHandler 永远不会执行,我总是在 return 中什么也得不到。

我对 NSURLConnetion 有什么误解或者我做错了吗?

如有任何建议,我们将不胜感激!

编辑

我发现代码在 viewDidLoad(我放置它的地方)中的所有其他代码完成后执行

我什至尝试将其包装在 dispatch_async(dispatch_get_main_queue(), ^{},

什么可以让它在我调用它时立即运行?发送同步请求?

我猜你是在主循环之外启动这些连接,试试:

NSArray *reqArray = [10 requests of url inside];
NSMutableArray * saveArray = [prepare to store 10 JSON data in here];
NSInteger counter = [reqArray count];

for (NSURLRequest *request in reqArray) {
    dispatch_async(dispatch_get_main_queue(), ^{ 
        [NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)     {
                           NSDictionary *result1 = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                           NSDictionary *result2 = [result1 objectForKey:@"keyForValueIWant"];
                           [saveArray addObject:result2];
                        counter -- ;
                           if (counter == 0) {
                               NSLog(@"all done");

                           }
                       }];
    });
}

因为NSURLConnection需要一个runloop来执行,如果runloop结束,连接就结束了。