【问题标题】:How do I use Apple's Reachbility in conjunction with NSURLConnection or NSURLSession?如何将 Apple 的 Reachbility 与 NSURLConnection 或 NSURLSession 结合使用?
【发布时间】:2015-12-04 03:54:33
【问题描述】:

在我的应用程序中,我使用 NSURLConnection 进行任何与服务器相关的 API 调用。

我正在使用函数NSURLConnection sendAsynchronousRequest queue completionHandler 向服务器发出异步请求。有时这些请求会失败,因为没有互联网连接。

如何将 Apple 的可达性类与 NSURLConnection 结合使用?

【问题讨论】:

    标签: ios networking nsurlconnection


    【解决方案1】:

    你只需要这样做:

    Reachability *reachability = [Reachability reachabilityForInternetConnection];    
    NetworkStatus internetStatus = [reachability currentReachabilityStatus];
    if (internetStatus != NotReachable) {
        // connection ok: call NSURLConnection sendAsynchronousRequest queue completionHandler here
    }
    else {
        // No connection
    }
    

    在下载大数据之前,请仔细检查网络是否由wifi提供。您可以通过 internetStatus 进行检查。

    【讨论】:

    • 不是正确的解决方案。可达性很容易混淆,这将阻止您发出本来会成功的请求。
    • 非常有趣,我不知道可能会造成混淆。你能告诉我更多关于这种行为的信息吗?
    • 当然。可达性定期检查网络以查看其是否正常工作。如果这些探测由于任何原因失败,无论是临时 DNS 故障、数据包丢失等,即使请求实际上成功,它也可以报告失败。在实验上,当通过蜂窝网络使用或快速更改网络时,可达性最有可能欺骗您。通常的症状是您看到手机服务或 Wi-Fi 信号,并且某些应用程序可以连接到 Internet,但其他应用程序不能。当然,我不知道确切的原因。如果我这样做了,我会提交一个错误,并且它已经被修复了。
    • 更准确地说,当蜂窝网络很糟糕时,您更有可能看到这种情况。
    • 非常感谢您的澄清,这很有趣,它将改变我检查互联网连接的方式。
    【解决方案2】:

    可达性的正确使用方法如下:

    1. 提出请求。
    2. 如果失败,请为您尝试访问的特定主机创建可达性侦听器 (reachabilityWithHostName:)。
    3. 当该类指示可达性已更改时,请检查它是否表示现在可达,如果是,则处置可达性对象并重新发出请求。

    你绝对应该做的是对可达性的初始请求进行门控。可达性 API 可能与现实不同步,导致您的应用无法发出本来可以成功的请求。

    但是,可以根据整体可达性限制周期性请求的重试率。但是,如果这些请求中的任何一个成功,您的应用就应该表现得好像可达性为它开了绿灯,即使它没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2011-10-30
      • 2014-03-22
      相关资源
      最近更新 更多