Почему 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вызывается, когда я отключаю и включаю WiFi, результат не всегда надежен. Когда я отключаю WiFi, текущий путьunsatisfied (No network route), однако, когда я снова включаю Wi-Fi, он вызывает pathUpdateHandler снова тем же путем unsatisfied (No network route).

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

1 ответ

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

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

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