1

我正在开发一个需要 Internet 连接的 iPhone 应用程序,因此我在我的项目中使用了 Apple 示例代码提供的可达性类文件。我在视图控制器中导入了“Reachability.m”并使用以下代码检查互联网连接

Reachability *reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];

要检查连接,

    if (internetStatus != NotReachable)
{
     My code to run.
}

好吧,直到昨晚,这一切都很好。但是现在互联网状态没有检测到没有互联网连接。我的 Wifi 已关闭,我使用这些 if 语句检查了状态

if(internetStatus==ReachableViaWiFi){
    NSLog(@"Reachable VIA WIFI");
}
if(internetStatus==ReachableViaWWAN) {
    NSLog(@"Reachable VIA WLAN");
}
if(internetStatus==NotReachable){
    NSLog(@"Not Reachable");
}

但它显示可通过 WIFI 到达。我的wifi已关闭,我找不到问题所在。前几天晚上,我什至没有更改上次工作时的任何代码。

我在 Xcode 模拟器上测试它。

4

3 回答 3

0

当您禁用 WiFi 时,您的设备会尝试从您的运营商访问互联网。这就是 ReachableViaWWAN 状态的原因。当您从设备设置中禁用 3G 时,只有您的设备会显示您未连接,然后 -

 if(internetStatus==NotReachable)
 {
       NSLog(@"Not Reachable");
 }

这个条件会成立。

于 2013-08-12T12:46:53.147 回答
0

尝试这个:

if([self connected] ) 
  {
    NSLog(@"Internet connected\n");
  } 


- (BOOL)connected 
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];  
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable);
}

您可以在此处获取 rechability 类:下载示例并将 Reachability.h 和 Reachability.m 添加到您的项目中。

于 2013-08-12T13:07:24.243 回答
0

我找到了我的问题的答案。Reachability 完全没有问题,即使没有建立连接,我的 MAC 也显示 Ethernet Connected,所以它导致了所有问题。考虑到硬件问题,下一个关于堆栈溢出的问题:P 谢谢大家的帮助:)

于 2013-08-12T13:17:10.893 回答