应用程序被iOS杀死后,NSURLConnection sendSynchronousRequest / sendAsynchronousRequest失败

时间:2012-12-24 00:10:43

标签: objective-c ios nsurlconnection

我的应用中的所有服务器连接都采用相同的方式:

  • dispatch_async到第二个帖子。
  • sendSynchronousRequest
  • 主线程上的失败/成功阻止。

  • 以下不是完整代码,只是概念:

    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); });
       });
    

该应用程序运行良好!我可以将它用于数千个服务器连接,并且当我运行应用程序的新负载时它总是有效。 发生以下情况时会发生此问题:

  1. 将应用程序发送给BG。
  2. 等一段时间......
  3. 应用程序被iOS杀死。
  4. 再次打开,iOS从头开始加载整个应用程序。 (参见第一个屏幕后面的启动画面,而不是我留给BG的那个..)
  5. 在那种情况下,我得到了NSURLConnectionErrors!各种各样的!代码1003,代码1009,代码9 ......只需命名! 我收到应用程序加载时启动的所有服务器连接的错误。之后的任何其他连接工作正常!包括刷新失败的那些!

    我几乎觉得我想要太快或太早地到达我的服务器,但是我会在启动连接之前检查并通过一次可靠性测试。

    真的可以在这里使用一些帮助。 提前致谢。

    更新:如下所示,尝试使用 sendAsynchronousRequest - 给了我完全相同的行为。 (错误:这次是1001)。

2 个答案:

答案 0 :(得分:4)

好的,明白了! appDelegate构建了tabBar,它加载了所有发送一些NSURLConnections的viewControllers ......所以对于iOS来说,等待响应并且全部失败都太长了! (不知道第一次启动是否正常,只有在应用程序杀死之后才会这样)

无论如何,我改变了所有服务器负载以使用0.1延迟的选择器执行。这样appDelegate可以完成运行并且一切都很好! :)

答案 1 :(得分:3)

您应该查看使用此方法并以异步方式发送数据

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

NSOpertationQueue mainQueue使用mainthread但是允许你在主线程上更新UI,例如activityindicator ..