我的应用中的所有服务器连接都采用相同的方式:
主线程上的失败/成功阻止。
以下不是完整代码,只是概念:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *url = [NSURL URLWithString:@"someURL"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSURLResponse *response = nil;
NSError *error;
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if (error)
{
dispatch_async(dispatch_get_main_queue(), ^{ _failureBlock(error); });
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{ _successBlock(data); });
});
该应用程序运行良好!我可以将它用于数千个服务器连接,并且当我运行应用程序的新负载时它总是有效。 发生以下情况时会发生此问题:
在那种情况下,我得到了NSURLConnectionErrors!各种各样的!代码1003,代码1009,代码9 ......只需命名! 我收到应用程序加载时启动的所有服务器连接的错误。之后的任何其他连接工作正常!包括刷新失败的那些!
我几乎觉得我想要太快或太早地到达我的服务器,但是我会在启动连接之前检查并通过一次可靠性测试。
真的可以在这里使用一些帮助。 提前致谢。
更新:如下所示,尝试使用 sendAsynchronousRequest - 给了我完全相同的行为。 (错误:这次是1001)。
答案 0 :(得分:4)
无论如何,我改变了所有服务器负载以使用0.1延迟的选择器执行。这样appDelegate可以完成运行并且一切都很好! :)
答案 1 :(得分:3)
您应该查看使用此方法并以异步方式发送数据
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
NSOpertationQueue mainQueue使用mainthread但是允许你在主线程上更新UI,例如activityindicator ..