Почему 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, потому что он не даст вам надежного результата.