我的可达性通知器只能被调用一次

所以,我有我的AppDelegate以下。
当我closuresWIFI时它会通知我,但在初始运行后不会有反应。
我过去曾经有过这样的工作。
我使用的是Xcode 8的Swift 3,以及这个版本的swift和xCode的可达性。

我希望得到这个解决scheme。

谢谢。

var reachability: Reachability? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. self.reachability = Reachability() NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged(_:)), name: ReachabilityChangedNotification, object: reachability) do { try self.reachability?.startNotifier() } catch { print("Unable to start Notifier") } return true } func reachabilityChanged(_ note:Notification){ print("is in here") let reachability = note.object as! Reachability if reachability.isReachable{ print("is Reachable") // self.amConnected.text = "YES" //self.amConnected.fadeOut(duration: 2.0) }else{ print("IsNotReachable") //self.amConnected.text = "No" //self.amConnected.fadeIn(duration: 2.0) } print("Changed status") } 

Swift 3中的Reachability有一些变化。下载最新的Reachability.swift文件并将其添加到您的项目中。 链接

对于Swift 2.x代码,请在这里查看我的答案

Swift 3.x代码

现在在您的AppDelegate获取一个Reachability类对象

 private var reachability:Reachability! func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. //Network Reachability Notification check NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged), name: ReachabilityChangedNotification, object: nil) self.reachability = Reachability.init() do { try self.reachability.startNotifier() } catch { } return true } 

reachabilityChanged更改方法定义

 //MARK:- Network Check func reachabilityChanged(notification:Notification) { let reachability = notification.object as! Reachability if reachability.isReachable { if reachability.isReachableViaWiFi { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } else { print("Network not reachable") } } 

无论何时用户从Wifi切换到Cellular,反之亦然,或者在networking连接和断开时,都将始终调用此function,反之亦然。
在我的情况下工作得很好。

Swift 3中断更改部分中阅读文档以获取更多详细信息

为你做了一个样品

https://www.dropbox.com/sh/bph33b12tyc7fpd/AAD2pGbgW3UnqgQoe7MGPpKPa?dl=0

尝试在addObserver中将objectparameter passing给nil 。 另外,对于Swift 3,我必须用self.reachability = Reachability.forInternetConnection()来初始化它。