3

ここで奇妙なバグが発生しました。これは、iOSデバイスが3G/4Gネットワ​​ークでのみ使用されている場合にのみ発生します。つまり、WiFi経由の場合-バグはなく、すべて正常に機能します。

- ( BOOL ) isInternetAccessAvailable
{
    CFNetDiagnosticRef diag;

    diag = CFNetDiagnosticCreateWithURL ( NULL, ( __bridge  CFURLRef )[NSURL URLWithString:@"www.apple.com"] );

    CFNetDiagnosticStatus status;

    status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );

    CFRelease ( diag );

    if ( status == kCFNetDiagnosticConnectionUp )
    {
        return YES;
    }
    else
    {
        NSString * title   = @"No Internet Connection";
        NSString * message = @"Please ensure you have an Internet Connection.";

        [self showAlertWithTitle:title andMessage:message];

        return NO;
    }
}

さて、UIWebViewにデータをロードしようとする前に呼び出される上記のメソッドがあります。

私が言ったように、WiFiネットワークを介して、これは完全に機能します。

WiFiがオフになっている(または利用できない/接続されていない)場合で、デバイスが3G/4Gネットワ​​ーク用のSIMを使用している場合。

が呼び出される行:

status = CFNetDiagnosticCopyNetworkStatusPassively ( diag, NULL );

次と同等のlongを返します。

kCFNetDiagnosticConnectionDown

したがって、テストは失敗し、ユーザーに警告UIAlertViewを表示します。

しかし、ネットワークはそこにあります!テストラインをこれに変更した場合:

if ( ( status == kCFNetDiagnosticConnectionUp ) || ( status == kCFNetDiagnosticConnectionDown ) )

3G / 4Gで動作し、Webページをダウンロードするため、デバイスやネットワークに障害はありません。

しかし、への呼び出しCFNetDiagnosticCopyNetworkStatusPassivelyは3G/4Gでのみ失敗します。

何か案は?

これは、広告とマーチャンダイジングの締め切りに間に合わせるために最近App Storeに急いで行ったアプリで見つかったばかりです。コードに問題がある場合は、これを修正してできるだけ早く再送信する必要があります。

4

2 に答える 2

4

Appleによって確認されたバグ。

必要に応じて複製:バグID#12443370

于 2012-10-08T18:49:50.977 に答える
1

これを使用して接続を確認できます

iOSまたはOSXでアクティブなインターネット接続を確認するにはどうすればよいですか?

同期バージョンのcannyboynの回答:https://github.com/tonymillion/ReachabilityでReachability.hとReachability.mを取得してください

#import "Reachability.h"

- (BOOL)connected 
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];  
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable);
}
于 2012-10-19T10:06:55.687 に答える