删除主机时,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 动态链接 (iOS)