我的可达性通知器只能被调用一次
所以,我有我的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
中将object
parameter passing给nil
。 另外,对于Swift 3,我必须用self.reachability = Reachability.forInternetConnection()
来初始化它。