【问题标题】:NSURLConnection Intermittent Failure iPhone Device On LANNSURLConnection 间歇性故障 iPhone 设备在 LAN 上
【发布时间】:2012-08-17 11:52:41
【问题描述】:

我正在使用 NSURLConnection 与 LAN 上的 Web 服务进行通信。使用 Xcode Simulator 时,一切都按预期工作。但是,在使用 iPhone 时,连接大多会超时(但并非总是如此)。

iPhone 通过 wifi 连接到 LAN。我可以使用 Safari 持续浏览 Web 服务器(托管 Web 服务)。

但是,该应用程序大多失败。它在报告“请求超时”的didFailWithError 函数中返回。

应用会间歇性地成功(行为完全符合预期)。我看不出成功或失败的模式。它可能会失败几次,然后成功然后再次失败(无需重新启动应用程序)。我估计失败率超过 90%。

网络服务总是接收请求并且总是响应。看来故障是由于设备未接收或处理响应而发生的。

我看不出我的网络有明显问题。当然没有IP地址冲突。

我对应用程序、Apple、Xcode 和 iPhone 完全陌生。所以这对你来说可能是非常明显的事情。有什么想法可以解决这个问题吗?

我目前用于开发的环境如下:

  • Mac OS X (10.7.4)
  • Xcode 4(针对 4.3)
  • iPhone 3GS (5.1.1)

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    显然我不能给你绝对的答案,但希望能帮助你找出问题所在。

    首先,您需要审查您的网络服务。将 JPEG 图像放在公共 Dropbox 文件夹中。现在尝试使用您的代码下载该图像并使用 Safari 查看它。如果 Safari 可以工作,但您的代码不能,那么您知道您的代码是问题所在。

    如果两者都失败,则手机的收发器可能有问题,或者您的 WIFI 网络可能不稳定。将手机带到某个公共 WIFI 位置并重新进行测试。如果在第二个网络上两者仍然失败,则手机可能有缺陷。

    如果在所有情况下 Safari 都能正常工作,但您的代码不能正常工作,那么请尽可能多地发布您的代码。另外,如果使用异步接口,你会被重定向吗?要求提供证件?等等。我倾向于添加每个 NSURLConnection 委托方法,并且至少添加一个日志,以便您知道发生了什么 - 即记录所有响应。您还可以从响应中获取 html 返回码:

    assert([response isKindOfClass:[NSHTTPURLResponse class]]);
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
    htmlStatus = [httpResponse statusCode];
    if(htmlStatus != 200) NSLog(@"Server Response code %i", htmlStatus);
    

    【讨论】:

    • 是的,我的代码是问题所在。手机wifi在当地咖啡馆工作正常。 Safari 在我的局域网上始终如一地工作。我编写了一个快速简单的测试应用程序(请求来自 ws 的文本响应),它始终如一地工作。我失败的应用程序有两个视图,每个视图都有自己的 NSURLConnection。虽然应用程序失败,只有一个活动连接,但我将从将 NSURLConnection 代码重构为一个类开始。谢谢。接受答案,但任何进一步的提示表示赞赏。例如我应该一次只运行一个查询吗?它适用于模拟器上的两个,但是......
    • 我正在异步查询并登录每个委托方法。不涉及授权。我想我只需要一个 NSURLConnection 实例。这就是我现在要尝试的。请说出这听起来是不是一个合理的方向,或者还有什么其他的想法。
    • 是的,每个 Web 事务使用一个 NSURLConnection。在我的应用程序中,我在 NSOperationQueue 中排队了数百个提取,并且它运行良好。如果您想查看一种快速简便的方法来执行此操作,请查看github.com/dhoerl/NSOperation-WebFetches-MadeEasy - 这是一种您可以找到的简单易用的技术。该项目构建了一个您可以运行的演示应用程序。
    • 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2011-10-27
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多