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 に答える
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 に答える