【问题标题】:iPhone reachability sample not always workingiPhone 可达性示例并不总是有效
【发布时间】:2011-06-27 23:20:38
【问题描述】:

使用 iphone sdk 3.1.2

我使用以下代码来监控我的应用是否有互联网连接。我需要接收通知或轮询,以便我的应用始终保持最新状态。

hostReach = [[Reachability reachabilityWithHostName: @"www.google.com"] retain];
[hostReach startNotifer];

然后当我收到通知时,我会使用这些功能让我知道网络状态

NetworkStatus netStatus = [hostReach currentReachabilityStatus];
BOOL connectionRequired= [hostReach connectionRequired];

我发现,如果我拔下 Netgear 路由器上的电源线,我的应用程序正确地知道它失去了互联网连接。但是,当我重新插入电源时,我的应用程序虽然从可达性回调中获取通知,但 netStatus 由

返回
[hostReach currentReachabilityStatus]

从不等于 ReachableByWifi 这是我想知道互联网是否可用 通过 WiFi 连接)。

即使我每 30 秒有一个计时器可以调用

[hostReach currentReachabilityStatus]

即使路由器已全部启动并且互联网绝对可用,它仍然不会返回 ReachablebyWifi。这是我认为可行的最坏情况。

另一方面,如果我只拔掉电话线连接并让路由器保持开机状态(即 wifi 信号仍然存在0,我的应用不会收到互联网连接断开的通知。

如何克服这些问题?

【问题讨论】:

    标签: iphone


    【解决方案1】:

    几个月前,我发现有人写了一个更好的可达性实现。您可以在http://blog.ddg.com/?p=24 找到它。我的公司在我们的应用程序中使用它,它比 Apple 示例更强大。

    【讨论】:

      【解决方案2】:

      我也有同样的经历。在我看来,Reachability 类是易碎的,应该被视为示例代码。应该有人根据社区的反馈重写整个内容。

      【讨论】:

      • 除可达性之外的任何解决方法或其他方法
      • 您可以阅读 Reachability 源代码并了解它是如何使用较低级别的 API 的。
      猜你喜欢
      • 2014-02-02
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2015-06-28
      • 2015-12-04
      • 2017-01-08
      • 1970-01-01
      相关资源
      最近更新 更多