2

私は Apple の Reachability クラスを使用しており、ピックアップしたイベントを表示するための簡単なテスト アプリを作成しました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [self initializeNetworkReachability];
    ...
}

#pragma mark - Network Reachability/Connection methods

- (void)initializeNetworkReachability {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkConnection:) name:kReachabilityChangedNotification object:nil];
    internetAvailable = [Reachability reachabilityForInternetConnection];
    [internetAvailable startNotifier];
    [self checkConnection:nil];
}

- (void)checkConnection:(NSNotification *)notification {
    NetworkStatus internetStatus = [internetAvailable currentReachabilityStatus];

    switch (internetStatus) {
        case NotReachable:
            _isConnectedToInternet = NO;
            break;
        case ReachableViaWiFi:
            _isConnectedToInternet = YES;
            break;
        case ReachableViaWWAN:
            _isConnectedToInternet = YES;
            break;
        default:
            _isConnectedToInternet = NO;
            break;
    }

    [self connectionAchieved:_isConnectedToInternet];
}

- (void)connectionAchieved:(BOOL)achieved {
    _isConnectedToInternet = achieved;
}

すべてかなりプレーンなバニラです... しかし、ここに問題があります。接続がまったく役に立たないことがわかっている場所 (オフィス ビルのすぐ外の通りの場所) に行っても、ネットワークの到達可能性が変更されたという通知が届きません。ただし、Safari を開いて Web サイトを閲覧しようとすると、アクセスできず、ページを読み込もうとしてハングします。

WiFiインジケーターとセルラー信号強度が変化するのを見て通りをさまよったところまで行きましたが、到達可能性からの信号は得られませんでした.

最後に、私は店に行き、一番後ろまで歩いて行き、WiFi がセルラー 1x に切り替わるのを見て (私は iPhone 5 を使用しています)、最終的に到達可能性が変わりました (ネットワークが利用できません)。ネットワークが完全に使用できなかった時間全体。

私は何か間違ったことをしていますか?到達可能性の使用法を誤解/誤解していますか? または、そうでない場合、人々はこれらの状況をどのように処理しますか??

4

1 に答える 1

1

あなたが説明している動作は、Reachability API の動作を期待する方法とまったく同じです。これは基本的に、デバイスが WiFi 経由で接続されているか、セルラー経由で接続されているか、まったく接続されていないかを簡単に知る方法です。信号強度やネットワーク接続の品質を示すものではありません。

于 2013-10-04T00:07:40.587 に答える