【发布时间】:2020-01-10 10:30:23
【问题描述】:
我正在使用 iOS 12 中引入的新“网络”库,但我无法弄清楚为什么用户连接后网络状态没有更新为 .satisfied。
这是目前为止的代码:
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 连接,当警报出现时,点击重试。令人惊讶的是,重试后的状态仍然是 .unsatisfied。为什么状态没有更新?
目标是点击“重试”,如果用户仍未连接,则继续显示警报,当用户连接时,点击重试警报应该被解除。
为了轻松设置网络监视器,您可以查看本教程:https://medium.com/@rwbutler/nwpathmonitor-the-new-reachability-de101a5a8835
请注意,我在实例化 NWPathMonitor() 时没有指定网络类型,因此它会检测所有类型的连接。
【问题讨论】:
-
所以您在视图加载之前关闭 wifi,查看警报,然后重新打开 wifi,然后点击重试按钮?
-
@DavidSteppenbeckPhD 是的,然后如果用户在重试时没有连接,请继续重复警报直到他连接。
-
我没有使用过 Network 库,但我已经使用 Reachability 框架进行了类似的测试(打开/关闭 wifi)。导致问题的一件事实际上是在模拟器上进行测试 - 通知不可靠。但是,一切都在真实设备上运行。所以,我建议的第一件事是在真实设备上检查它。
标签: ios swift connectivity network-framework nwpathmonitor