我的应用程序中的所有服务器连接都以相同的方式进行:
- dispatch_async 到第二个线程。
- 发送同步请求
主线程上的失败/成功块。
以下不是完整的代码,只是概念:
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); }); });
好吧,该应用程序运行良好!我可以将它用于数千个服务器连接,并且在我运行新加载的应用程序时它总是可以工作。当发生以下情况时,问题开始:
- 将应用程序发送到 BG。
- 等一会...
- 该应用程序被iOS杀死。
- 再次打开,iOS 从头开始加载整个应用程序。(请参阅启动屏幕,然后是第一个屏幕,而不是我留给 BG 的那个..)
在那种情况下,我得到 NSURLConnectionErrors!样样都有!代码 1003、代码 1009、代码 9……只要说出它的名字!我收到应用程序加载时立即启动的所有服务器连接的错误。之后的任何其他连接都可以正常工作!包括那些失败的刷新!
几乎感觉我试图太快或太早地到达我的服务器,但我确实在启动连接之前检查并通过了可达性测试。
真的可以在这里使用一些帮助。 提前致谢。
更新:如下所示,尝试使用sendAsynchronousRequest - 给了我完全相同的行为。(错误:这次是 1001)。