iOS可访问性未检测到设备中的“无服务”为“NotReachable”

时间:2015-12-04 14:14:26

标签: ios reachability connectivity cellular-network

我正在使用Apple提供的Reachability课程,我正在收听reachabilityChanged:通知:

- (void)reachabilityChanged:(NSNotification *)notification
{
   Reachability *reach = [notification object];

   if ([reach isKindOfClass: [Reachability class]]) {
       NetworkStatus status = [reach currentReachabilityStatus];

       if ((status == ReachableViaWiFi) || (status == ReachableViaWWAN)) {
          // Some operations here
       }
   }
}

当我在设置中设置飞行模式或禁用WiFi和蜂窝数据时,我在reachabilityChanged:中获得“NotReachable”状态,但是当我的设备似乎因任何原因暂时失去连接时(在设置),似乎没有检测到“NotReachable”状态。

我已经使用干扰器进行了一些测试,当设备进入状态栏中的“No Service”并且调用reachabilityChanged:时,我看到NetworkStatus是“ReachableViaWWAN” “而不是像我预期的那样”NotReachable“。

我需要在设备中检测到这种“无服务”状态,我该怎么办?

1 个答案:

答案 0 :(得分:0)

信用转到this person。这对我有用:

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

然后在ReachableViaWWAN案例中:

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;
    }

}