响应不正确 - WWAN的可达性

时间:2013-07-05 18:50:58

标签: iphone ios ipad reachability wwan

在检查iPAD 3 WiFi + Cellular的可达性(网络可用性)时,我碰到了下面提到的场景中发生的一个奇怪的问题。

`

- (BOOL)networkCheck
 {
    Reachability *wifiReach = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

    switch (netStatus)
    {
        case NotReachable:
        {
            NSLog(@"%@",@"NETWORKCHECK: Not Connected");    
            return false;
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"%@",@"NETWORKCHECK: Connected Via WiFi");       
            return true;
            break;
        } 
        case ReachableViaWWAN:
        {
            NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
            return true;
            break;
        }
    }
    return false;
 }

`

  • 在iPAD&中没有SIM卡的情况下还有 无WiFi连接,上面的方法执行ReachableViaWWAN案例, 似乎完全不正确,因为没有SIM或任何其他 WWAN网络可用。

为了克服这个问题,建议使用一种解决方法(或者我应该说是黑客攻击)。实施如下: 向可靠的主机发送请求&检查它的反应。

case ReachableViaWWAN:
    {
        NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
        NSData *responseData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"www.google.com"]] returningResponse:nil error:nil];
        if (responseData != nil)
        {
            return true;
            break;
        }
        else
        {
            return false;
            break;
        }

    }

我有几个疑问:

  1. 这可能听起来很不寻常,但硬件有问题 或iOS,它是ReachableViaWWAN,即使没有SIM卡 设备
  2. 这个问题是否有更好的解决方案(比上面提到的解决方法)?

1 个答案:

答案 0 :(得分:0)

我不知道您的代码中是否存在错误,但您可以尝试使用this来检查连接。 来自question

并且为了检查连接性,您可以创建如下方法:

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

以及您想要检查连接的任何地方

if (![self connected]) {
//THERE IS NO WWAN OR WIFI connection
}else{
// connected. 
}

它适用于我。