鉴于 iOS 的 SCNetworkReachability API 配置如下:
SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, "example.com");
SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context);
SCNetworkReachabilitySetDispatchQueue(reachabilityRef, dispatch_queue);
如果我像上面的例子一样配置一个域名,效果会很好。但是,如果我使用 IP 地址配置它,则永远不会调用回调。
任何人都可以确认这是 SCNetworkReachability API 的预期行为吗?如果是这样,有什么线索吗?
尝试使用 SCNetworkReachabilityCreateWithAddress 而不是 SCNetworkReachabilityCreateWithName。
eppz!reachability
。简单用法如:
// Get status on-demand.
[EPPZReachability reachHost:@"eppz.eu"
completition:^(EPPZReachability *reachability)
{
if (reachability.reachable) [self postSomething];
}];
确实如此。它不会工作,也不会与
SCNetworkReachabilityCreateWithAddress
一起工作(它实际上适用于未来可达性条件的变化,但第一个回调永远不会被调用)。
如果您的设计仅需要按需可达性检查,请考虑使用
SCNetworkReachabilityGetFlags
。
更多内容:为什么 IP 地址的异步可达性不起作用? 和 日常使用的块可达性