我搜索过这个问题的答案,并没有真正解决,至少在某些方面我无法解决这个问题 .
我最初只是检查Internet可达性,使用:
self.wwanReach = [Reachability reachabilityWithHostName:@"www.apple.com"];
[wwanReach startNotifer];
我现在需要支持本地WiFi连接(一般没有上网),当我找到 +reachabilityForLocalWiFi
时,我也注意到有 +reachabilityForInternetConnection
. 我想我可以使用这些,而不是硬编码 "www.apple.com"
,但唉,当我使用:
self.wwanReach = [Reachability reachabilityForInternetConnection];
[wwanReach startNotifer];
self.wifiReach = [Reachability reachabilityForLocalWiFi];
[wifiReach startNotifer];
我设置的“永不”的可达性回调被调用,对于“永不”的值,最多10分钟,12分钟,15分钟左右(这只要我的耐心持续 . )(用户的耐心会少得多,我确定 . )切换回reachabilityWithHostName:在几秒钟内工作 . 我也单独尝试了每个“对”,以防两个通知程序同时出现问题,但这没有任何区别 .
所以: what is the appropriate way to determine reachability to either the Internet/WWAN or a local Wifi network (either one, or both)?
[此特定用例是连接到Mac mini计算机到计算机网络的iPhone或iPad;我确定其他情况适用 . ]
4 回答
使用此功能检查wifi是否已打开
类似的代码可用于检查reachabilityForInternetConnection,但您必须检查
如果你关心它是通过wifi和
如果你关心它在WWAN上面
我遇到了同样的问题 . 我最终发现,对于WWAN或WiFi可达性,只有在网络发生变化时才会调用通知回调 .
换句话说,在创建可访问性对象后立即检查当前的可访问性 . 不要等待通知,因为通知只会在下次网络更改发生时发布 .
对于Internet / WWAN:
对于WiFi:
来自apple的可访问性示例向您展示了如何使用通知,这是一个事件推送模型并且应该是高效的,但我发现通知不会被激发,有时它们会提供错误的信息 . 所以我最终用一个2秒的重复计时器进行轮询,并使用上面的一个程序检查wifi . 这是good reference for timer implementation .
我不确定这是不是你的问题,但我注意到当你调用startNotifier时这很重要 . 我有一个类似的问题,从来没有接收过通知(但是我的想法并不是很好),直到我将startNotifier调用移动到某些UI代码,特别是applicationDidFinishLaunching .