Почему NWPathMonitor не обновляет путь, когда путь становится удовлетворительным?

#swift #nwpathmonitor

#swift #nwpathmonitor

Вопрос:

У меня есть простой класс с именем NetworkPathMonitor, который выглядит следующим образом:

 class NetworkPathMonitor: ObservableObject, Cancellable {
    @Published var path: NWPath? = nil
    
    let monitor = NWPathMonitor()
    
    init() {
        monitor.pathUpdateHandler = { [weak self] path in
            DispatchQueue.main.async {
                self?.path = path
            }
        }
        monitor.start(queue: DispatchQueue.global(qos: .background))
    }
    
    func cancel() {
        monitor.cancel()
    }
    
    deinit {
        cancel()
    }
}
  

Хотя pathUpdateHandler вызывается, когда я отключаю и включаю Wi-Fi, результат не всегда надежен. Когда я отключаю Wi-Fi, текущий путь является unsatisfied (No network route) текущим, однако, когда я снова включаю Wi-Fi, он pathUpdateHandler снова вызывает тот же путь unsatisfied (No network route) .

Однако в моем пользовательском интерфейсе у меня есть кнопка с надписью Повторить попытку. Когда я нажимаю его, он уничтожает текущий монитор и создает новый. Теперь в первом сообщении говорится satisfied (Path is satisfied), interface: en0 . Это означает, что, возможно, Wi-Fi потребовалось некоторое время для установления сетевого маршрута, но когда сеть стала доступной, она больше не вызывалась pathUpdateHandler .

Ответ №1:

Код действительно работал на реальном устройстве.

Не тестируйте NWPathMonitor на симуляторе iOS, потому что это не даст вам надежного результата.