我正在使用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,蜂窝网络连接还是完全没有连接的方法。它不表示网络连接的信号强度或质量。