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结束,连接就结束了。
我向 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结束,连接就结束了。