Почему статус сети не обновляется быстро?
Я использую новую библиотеку "Сеть", представленную в 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)
}
}
Чтобы воспроизвести ситуацию с потерей соединения в симуляторе, я отключаю Wi-Fi-соединение до загрузки представления, когда появляется предупреждение, нажмите "Повторить". Удивительно, но статус после повторной попытки остается.unsatisfied. Почему статус не обновляется?
Цель состоит в том, чтобы нажать "Повторить", и если пользователь по-прежнему не подключен, продолжайте показывать предупреждение, когда пользователь подключается, и предупреждение о повторном нажатии должно быть закрыто.
Чтобы упростить настройку сетевого монитора, вы можете проверить это руководство: https://medium.com/@rwbutler/nwpathmonitor-the-new-reachability-de101a5a8835
Обратите внимание, что я не указываю тип сети при создании экземпляра NWPathMonitor(), поэтому он обнаруживает все типы подключений.
1 ответ
NWPath
- это структура, поэтому она неизменяема. Это не изменится при данном вызовеpathUpdateHandler
.
Как только сетевой путь станет доступным, вы получите следующий вызов pathUpdateHandler
с .satisfied
статус.
С точки зрения пользовательского опыта, вероятно, не лучший способ показывать модальное предупреждение. Обычно вы указываете, что сетевое соединение недоступно, с помощью какого-либо другого индикатора - всплывающего сообщения или значка, который исчезает или изменяется, когда сеть становится доступной.
Альтернативно или дополнительно использовать .waitsForConnectivity
о вашем подключении.