Достижимость не возвращает соединение, когда приложение возвращается на передний план

Когда мое приложение снова выходит на передний план, мое SCNetworkReachabilityCallBack вызывается с пустым объектом флагов (т.е. без reachable флаг), который говорит мне, что устройство больше не может достичь требуемого актива...

Сначала я подумал, что это может быть просто потому, что приложение перешло в фоновый режим, и в этот момент, возможно, было отправлено недоступное уведомление, которое доставляется, когда приложение выходит на передний план, но нет reachable обратный вызов функции, так что это не может быть так.

Кто-нибудь еще испытывает эту проблему, или есть какие-либо идеи, почему это может происходить? Я использую класс достижимости, чтобы показать пользовательский интерфейс, так что это довольно важно для моего приложения!

Код для настройки очереди:

// Creates a context
var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil)
// Sets `self` as listener object
context.info = UnsafeMutableRawPointer(Unmanaged<Reachability>.passUnretained(self).toOpaque())

let callbackClosure: SCNetworkReachabilityCallBack? = {

    (reachability:SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) in

    guard let info = info else { return }
    // Gets the `Handler` object from the context info
    let handler = Unmanaged<Reachability>.fromOpaque(info).takeUnretainedValue()

    handler.queue.async {
        handler.checkReachability(flags: flags)
    }
}
// Registers the callback. `callbackClosure` is the closure where we manage the callback implementation
if !SCNetworkReachabilitySetCallback(reachability, callbackClosure, &context) {
    // Not able to set the callback
}

SCNetworkReachability Объект настраивается в методе init:

init?(hostName: String) {

    guard let _reachability = SCNetworkReachabilityCreateWithName(nil, hostName) else { return nil }

    reachability = _reachability
}

0 ответов

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