【问题标题】:Reachability responding with wrong status code in iOS 7 iphone 5iOS 7 iphone 5 中的可达性响应错误状态码
【发布时间】:2013-11-25 19:28:19
【问题描述】:

我在装有 iOS 7 的 iPhone 5 上遇到了奇怪的问题,我已经在 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 值。

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

提前致谢!!

【问题讨论】:

    标签: ios objective-c ios7 iphone-5 reachability


    【解决方案1】:

    我遇到了同样的问题。解决方案是检查标志 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】:

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

      在这里检查。

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

      在此处下载。

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

      【讨论】:

      • 使用 Apple 的最新代码为我解决了 WWAN 问题。谢谢。
      • 也为我修好了
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 如果您的帖子不是为了回答问题,请将其添加为评论。
        【解决方案5】:
         - (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;
        
        
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-28
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-26
          相关资源
          最近更新 更多