Когда мое приложение повторно выходит на передний план, мой 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
}