1

在检查 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 网络可用。

为了克服这个问题,建议并实施如下解决方法(或者我应该说是 hack):向可靠的主机发送请求并检查其响应。

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. 这可能听起来很另类,但是即使设备中没有 SIM 卡,它是 ReachableViaWWAN 的硬件或 iOS 是否有问题?
  2. 该问题是否有更好的解决方案(比上述解决方法)?
4

1 回答 1

0

我不知道这是否是您代码中的错误,但您可以尝试使用来检查连接。从这个问题

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

 -(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. 
}

这对我来说可以。

于 2013-07-06T00:25:18.703 回答