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

Posted

技术标签:

【中文标题】删除主机时,iOS 可达性无法识别【英文标题】:iOS Reachability Not Recognizing When Host is Removed 【发布时间】:2011-08-10 18:09:42 【问题描述】:

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

当我对 ios 设备进行网络访问(例如打开飞行模式)时,一切正常,但如果我从网络中删除设备,可达性似乎没有注意到变化。

似乎可达性正在缓存结果,而不是看到更新。

【问题讨论】:

请检查您的 NSNotification 观察者。如果它在进入后台或进入前台时被移除。 可以查看苹果Reachabilty示例类:developer.apple.com/library/content/samplecode/Reachability/… 【参考方案1】:

那么不要使用可达性!

请改用这段代码,它会很有效;

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

【讨论】:

我和 Nathan 有同样的问题。您的解决方案很简单,但随时可用!我唯一要添加的是使用新的 stringWithContentsOfURL 格式。 NSError* 错误 = 零; NSString *connected = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"twitter.com"] encoding:NSASCIIStringEncoding error:&error]; 我不会等待 25 秒以等待结果返回。【参考方案2】:

SCReachability API 仅检查本地硬件是否配置为可以到达指定地址;它实际上并没有尝试到达它。要确定目标是否活着并且正在踢,您必须尝试打开与它的连接。

【讨论】:

【参考方案3】:

查看this answer。虽然 pixelbit 的答案是可行的,但 burtlo 提出仅等待 25 秒并不是一个好主意是正确的。使用 NSURLConnection 更简洁。

【讨论】:

【参考方案4】:

Apple 更新了 Reachabilty 类文件。您可以使用最新的 Xcode 对其进行测试。 这是链接: Apple Reachabilty Sample Code

我在 iPhone 6 版本 10.3.1 上使用 Xcode 8.3.1 进行了测试。 它会通知用户网络状态的变化。

【讨论】:

以上是关于删除主机时,iOS 可达性无法识别的主要内容,如果未能解决你的问题,请参考以下文章

Linux:无法识别 Spring Cloud Web 应用程序的主机名

Firebase托管中无法识别角度材料

应用不在后台时无法识别 Firebase 动态链接 (iOS)

iOS:从 iPad 屏幕外开始滑动时,无法识别滑动手势

VS Code - Angular 1/TypeScript - 删除 /// 参考时无法识别“角度”

为啥 Tesseract OCR 库(iOS)根本无法识别文本?