5

我在带有 iOS 7 的 iPhone 5 上遇到了奇怪的问题,我已经用包括 iOS 7 在内的不同 iOS 组合的 iPad1、2、3 和 iPhone 4、4s 等其他设备测试了相同的代码。

问题 :

当我打开飞行模式时,我确实收到了带有状态的可访问性通知,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 值。

有人遇到过类似的问题吗??我已经搜索但没有找到类似的场景。

提前致谢 !!

4

5 回答 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;
}
于 2014-01-29T14:11:40.103 回答
2

旧的可达性文件不好。Apple 已更新其可访问性文件。

在这里检查。

https://developer.apple.com/Library/ios/samplecode/Reachability/Introduction/Intro.html

在这里下载。

https://developer.apple.com/Library/ios/samplecode/Reachability/Reachability.zip

于 2014-05-23T13:53:35.657 回答
1

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

于 2014-01-07T13:09:32.233 回答
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;


    }

}
于 2014-10-09T10:36:21.673 回答
0

如果您使用 Apple 提供的 Network Link Conditioner 工具,可达性类可能会产生奇怪的结果。

于 2014-08-20T18:40:24.893 回答