NSURLConnection挂

时间:2012-04-18 03:43:54

标签: iphone objective-c ios ios5

我有一个iOS 5应用程序,它使用NSURLConnection通过GET加载一些XML。在非常罕见的情况下,连接似乎会在重复超时的情况下卡住。

示例请求:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url]];
/*
The request is set with a timeout interval of 10 because (due to the nature of 
the app and the XML feed) this data is reloaded every 15 seconds.
*/
[request setTimeoutInterval:10];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setHTTPMethod:@"GET"];
self.afOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
self.afOperation.successCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);
self.afOperation.failureCallbackQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);
//snip success/completion block code
[self.afOperation start];

到目前为止,我已经看过三次"恢复"请求开始挂起的场景。

  • 退出整个应用
  • 将设备插入计算机(是的,真的)。在iPhone / iPad确认连接后,它会立即停止超时。
  • 离开应用程序,继续做一些其他事情。快速离开并重新进入应用程序通常不足以导致恢复。

正如您可能想象的那样,我发现这非常奇怪。此时我用AFNetworking替换了我自己的NSURLConnectionDelegate实现(如上所示),但仍然遇到了同样的问题。我已经将记录添加到每个NSURLConnectionDelegate协议选择器,并发现唯一被调用的(在调用start之后)的选择器是connection:didFailWithError:。我确保我没有堆积多个请求(之前的请求总是被取消,并且在开始新请求之前没有任何内容)。此外,我已经验证在我的路由器上实际上没有通过tcpdump发送请求。什么可能导致这种行为?

2 个答案:

答案 0 :(得分:1)

事实证明这个问题是由TestFlight SDK v1.0及更低版本引起的。见Why does NSURLConnection fail to reach the backend?

在他们发布修补程序之前,除了完全剥离SDK之外,没有办法解决问题。

答案 1 :(得分:1)

我在安装testflight sdk后开始看到错误,并删除它帮助我摆脱它。但是,我认为这是由Testflight和ASIHttpRequest(或您使用的任何其他套件)之间的交互引起的。它也可以通过以下链接中的解决方案解决(在构建阶段禁用ASIHttpRequest和ASIFormDataRequest文件的编译器优化)

https://groups.google.com/forum/?fromgroups#!topic/asihttprequest/fw7PDcD2wKI%5B1-25%5D

相关问题