草庐IT

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

coder 2023-07-30 原文

我的应用程序中的所有服务器连接都以相同的方式进行:

  • dispatch_async 到第二个线程。
  • 发送同步请求
  • 主线程上的失败/成功 block 。

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

    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 的那个……)

在那种情况下我得到 NSURLConnectionErrors!!各种各样的!代码 1003、代码 1009、代码 9……随便说吧! 我在应用程序加载时立即开始的所有 服务器连接出现错误。之后的任何其他连接都可以正常工作!包括刷新失败的!

这几乎感觉就像我试图太快或太早到达我的服务器,但是我确实在启动连接之前检查并通过了可达性测试。

在这里真的需要一些帮助。 提前致谢。

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

最佳答案

好的,知道了! appDelegate 构建了 tabBar,它加载了所有发送了一些 NSURLConnections 的 viewControllers... 所以对于 iOS 来说,等待响应的时间太长了,但都失败了! (不知道第一次启动是否正常,只有在应用程序终止后才不会)

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

关于objective-c - 应用程序被 iOS 杀死后,NSURLConnection sendSynchronousRequest/sendAsynchronousRequest 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015751/

有关objective-c - 应用程序被 iOS 杀死后,NSURLConnection sendSynchronousRequest/sendAsynchronousRequest 失败的更多相关文章

随机推荐