Почему статус сети не обновляется быстро?

Я использую новую библиотеку "Сеть", представленную в 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 о вашем подключении.

Другие вопросы по тегам