微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当路径变得满意时,为什么NWPathMonitor不提供路径更新?

如何解决当路径变得满意时,为什么NWPathMonitor不提供路径更新?

我有一个名为 NetworkPathMonitor 的简单类,如下所示:

class NetworkPathMonitor: ObservableObject,Cancellable {
    @Published var path: NWPath? = nil
    
    let monitor = NWPathMonitor()
    
    init() {
        monitor.pathUpdateHandler = { [weak self] path in
            dispatchQueue.main.async {
                self?.path = path
            }
        }
        monitor.start(queue: dispatchQueue.global(qos: .background))
    }
    
    func cancel() {
        monitor.cancel()
    }
    
    deinit {
        cancel()
    }
}

尽管在禁用并启用WiFi时调用pathUpdateHandler,但结果并不总是可靠的。当我禁用WiFi时,当前路径为unsatisfied (No network route),但是当我再次启用WiFi时,它将使用相同的路径pathUpdateHandler再次调用unsatisfied (No network route)

但是,在我的UI中,有一个显示“重试”的按钮。当我按它时,它将破坏当前的监视器并建立一个新的监视器。现在,第一则消息为satisfied (Path is satisfied),interface: en0。意思是,WiFi可能花费了一些时间来建立网络路由,但是当网络确实可用时,它不再呼叫pathUpdateHandler

解决方法

完成的代码可以在真实设备上运行。

请勿在iOS模拟器上测试NWPathMonitor,因为它不会给您可靠的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。