【问题标题】:Why does NSURLConnection fail to reach the backend?为什么 NSURLConnection 无法到达后端?
【发布时间】:2012-04-14 00:03:30
【问题描述】:

我正在开发一个带有自定义通信层的应用。 我的帮助类依赖 NSURLConnection 来处理与后端的通信。

我遇到了一个随机错误,其中发送了请求,但应用程序没有从我们的服务器得到响应。另外,NSURLConnection 的超时永远不会被触发。

此外,当应用进入此状态时,Mixpanel(一个跟踪器框架)会记录连接错误以及 TestFlight。

如果您终止应用并启动 Safari,您仍然可以访问 google.com。

目前,我们的应用不支持多任务处理。然而,我们发现 TestFlight 正在强制应用“不终止”。

是否有可能由于 TF 库的这种副作用,应用程序会进入不一致的状态……在这种状态下,任何传出连接都会失败?

有人遇到过这样的问题吗?

提前致谢!!

...

作为旁注,我想补充一点,后端已经过检查(托管在亚马逊上),一切似乎都很好。

=======

编辑:

TestFlight 研究员刚刚确认此错误是由他们的库引起的(我在 TF 1.0 beta 版本中遇到了它)。

【问题讨论】:

  • 你能在服务器端证明正在发送响应吗?
  • 这是一个非常随机的错误。我在这之间花了 6 个小时与 Charles Proxy,但无法触发它。到目前为止,我唯一的提示是 Mixpanel AND TestFlight 记录了连接错误。
  • 你如何发送你的 NSURLConnection,同步还是异步?您是从主线程、后台线程还是 NSOperation 还是其他什么地方调用?
  • 它应该是异步的。 (我这样初始化它:[[NSURLConnection alloc] initWithRequest:_urlRequest delegate:self startImmediately:YES])。我有断言来防止从后台线程执行,以防万一。没有NSOperation。我曾经有线程安全代码来处理自定义队列(使用 GCD),但我读到这不是一个好主意......所以这是我完成的第一个测试,我已经注释掉了 GCD 代码。这么长的短篇故事,主线,没什么奇怪的。!。谢谢..!!
  • 尝试启动连接并立即按下主页按钮。如果问题出在后台模式,这是重现它的唯一方法。

标签: objective-c ios


【解决方案1】:

TestFlight SDK(1.0 和更早版本)存在一个已确认的错误,导致 NSURLConnection 永远不会返回其任何异步回调(成功/超时错误)。

【讨论】:

  • 谢谢埃里克!你还记得你在哪里见过它吗?。
  • 找到了!你知道... Apple 的论坛受保密协议约束,所以我不确定我是否可以发布任何内容。但我只想说...找到标题为“NSURLConnection 随机停止工作,直到应用重新启动”的帖子。我有同样的问题。谢谢!
  • 有没有办法关注 TestFlight 网站上的官方错误报告?
  • 豪尔赫,我想我遇到了同样的错误,但我还有其他症状。它只在WiFi上。如果我退出应用程序,打开 3G 并返回它,待处理的 NSURLConnections 完成。您是否也看到了这种行为?
  • @erik:感谢您提供的信息。你在哪里找到这些信息的?我在 testflight 的页面上找不到任何描述此内容的内容。
【解决方案2】:

【讨论】:

  • 对不起,这与我的故障无关。我没有使用 AFNetworking。另外,我不使用 ARC,因为该应用针对的是 iOS 4 或更高版本。
  • 如果你阅读了github上的帖子,并不是所有的人都在使用AFNetworking,但仍然遇到同样的问题
猜你喜欢
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2022-07-27
相关资源
最近更新 更多