我正在使用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并尝试浏览网站,则无法访问,只是挂起并试图加载页面。

我走到街上,看着我的WiFi指示器和蜂窝信号强度发生了变化,但是这种变化却没有,但是我从可达性的东西中都没有得到任何信号。

最终,我走进一家商店,走到最后面,看着WiFi切换到1x蜂窝电话(我在iPhone 5上),并最终改变了可到达性(无可用网络)。整个时间网络完全不可用。

难道我做错了什么?误解/误解了可达性的用法?或者,如果没有,人们在世界上如何处理这些条件?

最佳答案

您所描述的行为正是我希望Reachability API表现出来的行为。它基本上是一种简单地了解您的设备是通过WiFi,蜂窝网络连接还是完全没有连接的方法。它不表示网络连接的信号强度或质量

10-05 22:44