Достижимость не возвращает соединение, когда приложение возвращается на передний план - PullRequest
0 голосов
/ 11 сентября 2018

Когда мое приложение повторно выходит на передний план, мой SCNetworkReachabilityCallBack вызывается с пустым объектом flags (т.е. без флага 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
}
...