iPhone应用程序失去互联网连接(NSURLConnection没有返回)

4
我遇到了一个非常难以调试的问题。如果我的应用程序使用WiFi并处于空闲状态约30分钟,有时当我唤醒它时,NSURLConnection不再响应。请求被发送,但从未返回。
起初,我认为这是内存错误,实例被过早释放,因此从未返回响应。然而,如果我把应用程序放在后台,进入设置,关闭WiFi,使3G独占使用,并返回应用程序,互联网连接就会神奇地恢复正常,所有待处理的NSURLConnection都会返回并完成。
显然,这对使用WiFi的人来说是个问题。这真的是WiFi问题,还是我漏掉了什么?像Safari这样的其他应用程序,使用WiFi无线电并返回我的应用程序并不能解决这个问题-连接仍然不返回。我已经用Xcode跟踪了这个问题,现在想不出更好的办法了。
另外,“应用程序使用WiFi”Info.plist标志设置为ON,这是5.1固件。 “应用程序使用WiFi”与UIRequiresPersistentWiFi是否相同?
更新:这与Wifi标志无关-它可能在5分钟内死机。到目前为止,我只能在我的iPhone 4s上重复这个问题,使用的是5.1固件。这不是真正的解决方案,但我正在清除手机,尝试使用新的安装来查看是否有任何影响。我已经验证了NSURLConnection总是在主线程上调用,并在connection:failedWithError:connection:didReceiveResponse:处设置断点。当连接死掉时,这些都不返回,直到我禁用并重新启用WiFi,然后所有内容都一次性返回。这在本地服务器上也会发生,如果我用web浏览器ping它,服务器仍然会返回。

1
你尝试过设置UIRequiresPersistentWiFi标志吗? - esqew
我认为是这样的 - 在 pList 文件中,“应用程序使用 WiFi”已经开启。 - Shaun Budhram
你是否无意中阻塞了主线程?你尝试在后台线程中使用同步的 NSURLConnection 了吗? - magma
是的,我很确定主线程没有被阻塞,因为我的应用程序仍然响应,并且我可以切换选项卡。接下来我将尝试在后台线程中使用同步连接。 - Shaun Budhram
2个回答

3

这个 bug 已经困扰我好几周了,感谢感谢感谢! - Paul Kehrer

0

你是否实际通过NSURLConnection传输/接收任何数据?如果没有,可能是因为你遇到了TCP会话超时问题。如果问题在本地服务器上仍然存在,这似乎不太可能,但任何中间的有状态防火墙/数据包检查器都可能导致你的TCP连接断开。


我在想,由于我正在进行子类化,所以在某些情况下可能无法实际提交 NSURLConnection。我会调查一下。也许在没有子类化的情况下进行测试可能会解决问题。感谢您的建议。 - Shaun Budhram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接