iOS 7 iPhone 5中的可达性响应错误状态码

5
我在iPhone 5 iOS 7上遇到了奇怪的问题。我测试了与其他设备相同的代码,如iPad1、2、3和iPhone 4、4s等不同iOS组合,包括iOS 7。
问题:
当我打开飞行模式时,我会得到预期的可达性通知,状态为"NotReachable",但紧接着应用程序会接收到状态码为"ReachableViaWWAN"的通知,这是不可预料的。
代码:
+(BOOL)checkReachability
{
    Reachability* internetReachable = [Reachability reachabilityForInternetConnection];
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)

    {
        case NotReachable:
        {
            DebugLog(@"The internet is down.");
            return NO;
            break;
        }
        default:
            return YES;
            break;
    }
    return YES;
}

在飞行模式下,我在开关之前添加了日志,该开关返回状态为ReachableViaWWAN

可能的解决方法是:

添加ReachableViaWWAN的情况,并在该情况下检查主机是否可达。并相应地返回BOOL值。

有人遇到过类似的问题吗?我已经搜索过了,但没有找到类似的情况。

提前感谢!!

5个回答

10

我也遇到了同样的问题。解决方法是检查标志isConnectionRequired。文档说明如下:

WWAN可能可用,但在建立连接之前不活动。

代码

BOOL isServerAvailable;
Reachability *reachability = [Reachability reachabilityForInternetConnection];

if ((reachability.isConnectionRequired) || (NotReachable == reachability.currentReachabilityStatus)) {
    isServerAvailable = NO;

} else if((ReachableViaWiFi == reachability.currentReachabilityStatus) || (ReachableViaWWAN == reachability.currentReachabilityStatus)){
    isServerAvailable = YES;
}

2

1
使用最新的苹果代码解决了我的 WWAN 问题。谢谢。 - sust86
也为我解决了问题。 - Nick T

1
我遇到了这个问题,并在这里找到了解决方案。基本上,由于某些原因,即使处于飞行模式,也有可能获得ReachableViaWWAN。然而,还有另一个标志可以指示是否必须首先建立连接。这是kSCNetworkReachabilityFlagsConnectionRequired标志,在Reachability类中有一个很好的辅助方法connectionRequired

0
 - (void)handleReachability:(Reachability *)reachability
{
    NetworkStatus netStatus = [reachability currentReachabilityStatus];
    BOOL connectionRequired = [reachability connectionRequired];
    NSString* statusString = @"";

    switch (netStatus)
    {
        case NotReachable:
        {

            if (connectionRequired) {
                [TSMessage setDefaultViewController:[UIApplication sharedApplication].keyWindow.rootViewController];

                [TSMessage showNotificationWithTitle:NSLocalizedString(@"Something failed", nil)
                                            subtitle:NSLocalizedString(@"The internet connection seems to be down. Please check that!", nil)
                                                type:TSMessageNotificationTypeError];
            }

            connectionRequired = NO;
            break;
        }
        default:
            break;


    }

}

0

如果您正在使用由苹果提供的网络链接调节器工具,则可达性类可能会产生奇怪的结果。


如果您的帖子不是为了回答问题,请将其作为评论添加。 - aravind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接