【发布时间】:2015-08-05 12:15:27
【问题描述】:
我正在编写一个 Cocoa OS X 应用程序,该应用程序需要根据系统从睡眠中唤醒时是否存在互联网连接来执行不同的操作。我使用NSWorkspace.sharedWorkspace() 的通知中心来接收唤醒通知,如下所示:
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "onSystemWake:", name: NSWorkspaceDidWakeNotification, object: nil)
我的问题是onSystemWake: 的实现。我使用Reachability示例代码来查询系统唤醒时是否有互联网连接:
@objc func onSystemWake(notif: NSNotification) {
let status = internetReachability.currentReachabilityStatus()
if status.value == NotReachable.value {
// Internet not reachable, do some stuff.
} else {
// Internet reachable, do some other stuff.
}
}
当我在家并将笔记本电脑置于睡眠状态并再次唤醒时,这似乎工作正常。但是,如果笔记本电脑在睡眠期间切换到另一个已知的 WiFi(例如,当我到达我的大学时),上面的代码会检测到当笔记本电脑在新位置从睡眠中唤醒时,no 互联网可访问性 -尽管实际上有一个已知的 WiFi 可用。
我认为造成这种情况的原因是当我的应用程序收到系统唤醒通知时,网络连接仍在建立过程中。
我可以在收到系统唤醒通知后 x 秒延迟我的互联网可达性检查,但这似乎是一个非常糟糕的解决方案,因为笔记本电脑和网络的某些组合可能需要更长的连接时间比其他人。
有没有办法在网络适配器(有线和无线)完成连接尝试时收到通知?
【问题讨论】:
标签: macos swift cocoa reachability