无法识别何时删除主机的iOS可达性

我正在构build一个应用程序,并尝试检查并查看设备是否仍然可用(通过连接到设备IPAddress)。 我正在使用可达性来确认它是否可用。

当我为iOS设备进行networking访问时(例如打开飞行模式),一切工作正常,但是如果我从networking中删除设备,可达性似乎没有注意到这一变化。

似乎可达性caching的结果,并没有看到更新。

那么不要使用可达性!

使用这一点的代码,而不是一个治疗;

NSString *connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; wait(25000); if (connected == NULL) { NSLog(@"Not Connected"); //Code to show if not connected UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Oops! You aren't connected to the Internet." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } else { NSLog(@"Connected Successfully!"); //Any other code for successful connection } 

SCReachability API只检查本地硬件是否configuration为可以达到指定的地址; 它实际上并没有试图达到它。 要确定目标是否活着并踢,你必须尝试打开一个连接。

看看这个答案 。 虽然pixelbit的答案是可行的,burtlo是正确的,只是等待25秒是不是一个好主意。 使用NSURLConnection更清洁。

苹果更新了Reachabilty类文件。 你可以用最新的Xcode进行testing。 这里是链接: 苹果Reachabilty示例代码

我使用Xcode 8.3.1在iPhone 6 10.3.1版上进行了testing。 它会通知用户networking状态的变化。