首页 > 解决方案 > 为什么 NWPathMonitor 状态总是满足?

问题描述

当没有连接时,我从 URL 会话中收到一条错误消息,指出请求超时。
我正在使用网络协议事先检查连接性,但显然这不像我在内部调用它时那样工作viewDidLoad

static func startUpdateProcess() {
    let monitor = NWPathMonitor()

    monitor.pathUpdateHandler = { path in
        if path.status == .satisfied {
            print("Good! We are connected!")
            Helper.createDownloadTask()
        } else {
            print("No connection. Local file not updated!")
        }
    }
    let queue = DispatchQueue(label: "Monitor")
    monitor.start(queue: queue)
}

...我得到“好!我们有联系!”。如果没有连接并因此触发else语句,不应该不满足路径吗?
仅供参考,createDownloadTask()询问 API 并下载所需数据。

你能告诉我这里有什么问题else吗?如果路径不满意,我该怎么做才能得到声明?

谢谢!

标签: iosswiftnetwork-programmingurlsession

解决方案


感谢用户 May Rest in Peace 为我指明了正确的方向。

尽管文档对网络协议保持沉默,但似乎只要设备连接到网络,该类的status属性(NWPath类型的枚举)就会NWPath.Status返回.satisfied,无论该网络是否正在工作、传输数据或不。

触发上述声明的唯一方法是else在启动应用程序之前停用 Wi-Fi 和/或蜂窝数据或断开与任何网络的连接。

所有这些属性都列在文档中,但没有一个附有描述或讨论。 用户@twostraws 的这篇文章允许我创建该代码的第一部分。


推荐阅读