iPhone可达性样本并不总是有效

时间:2010-02-07 17:55:46

标签: iphone

使用iphone sdk 3.1.2

我使用以下代码来监控我的应用是否具有互联网连接。我需要获得通知或投票,以便我的应用程序始终具有最新状态。

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

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

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

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

返回的netStatus
[hostReach currentReachabilityStatus]

永远不等于ReachableByWifi,这是我想知道的互联网是否可用 通过WiFI连接)。

即使我每隔30秒就有一个计时器来打电话

[hostReach currentReachabilityStatus]

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

另一方面,如果我只拔出电话线连接并让路由器保持开机状态(即wifi信号仍然存在,我的应用程序没有得到通知,互联网连接已关闭。

如何解决这些问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我经历过同样的经历。在我看来,Reachability类是开心的,应该被视为示例代码。有人应根据社区的反馈重写整件事。