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