我正在使用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上),最后得到了可达性改变(没有网络可用)。网络完全无法使用的整个时间。
我做错了吗?误解/误解可达性的使用?或者,如果没有,世界上人们如何处理这些条件?
答案 0 :(得分:1)
您所描述的行为正是我期望Reachability API的行为方式。它基本上只是一种方式来简单地知道您的设备是通过WiFi,蜂窝电话连接还是根本没有连接。它不表示网络连接的信号强度或质量。