为什么网络状态没有在swift中更新



我正在使用iOS 12中引入的新"网络"库,但我不明白为什么用户连接后网络状态没有更新到令人满意。

这是迄今为止的代码:

import Network
class MapViewController: UIViewController {
let networkMonitor = NWPathMonitor()
let queue = DispatchQueue(label: "NetworkMonitor")
override func viewDidLoad() {
super.viewDidLoad()
// check for internet connection
networkMonitor.pathUpdateHandler = { path in
if path.status != .satisfied {
// alert the user to check internet connection
let alert = UIAlertController(title: "Internet Error", message: "Unable to connect. Please check your internet connection.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Retry", style: .default, handler: { (action) in
// TODO: after retry should update status but its not updated
print("Status after retry: (path.status)")
}))
self.present(alert, animated: true, completion: nil)
} else {
print(path.status)
}
}

networkMonitor.start(queue: queue)
}
}

为了在模拟器中复制丢失连接的情况,我在加载视图之前关闭了wifi连接,当警报出现时,点击重试。令人惊讶的是,重试后状态保持不变。不满意。为什么状态没有更新?

目标是点击"重试",如果用户仍未连接,则继续显示警报,当用户连接并点击重试时,警报应被解除。

为了轻松设置网络监视器,您可以查看本教程:https://medium.com/@rwbutler/nwpathmonitor-新的可访问性-de101a5a8835

请注意,我在实例化NWPathMonitor()时没有指定网络类型,因此它检测所有类型的连接。

NWPath是一个结构,因此它是不可变的。在给定的pathUpdateHandler调用中,它不会改变。

一旦网络路径可用,您将获得具有.satisfied状态的pathUpdateHandler的后续调用。

从用户体验的角度来看,这可能不是显示模式警报的好方法。您通常会使用其他指示器(toast或图标)来指示网络连接不可用,一旦网络可用,该指示器就会消失或更改。

或者,在连接中使用.waitsForConnectivity

最新更新