2016-12-19 22 views
0

我想检测网络更改。例如,当从wifi切换到4G或返回时。但是我的代码没有检测到这些变化。当应用程序启动时,我只获得一些输出。通知中心未触发网络更改

我有这样的代码:

import ReachabilitySwift 

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let reachability = Reachability()! 


     NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged),name: ReachabilityChangedNotification,object: reachability) 
     do{ 
      try reachability.startNotifier() 
     }catch{ 
      print("could not start reachability notifier") 
     } 

    } 

func reachabilityChanged(note: NSNotification) { 

     let reachability = note.object as! Reachability 

     if reachability.isReachable { 
      if reachability.isReachableViaWiFi { 
       print("Reachable via WiFi") 
      } else { 
       print("Reachable via Cellular") 
      } 
     } else { 
      print("Network not reachable") 
     } 
    } 

难道我已经实现了什么问题?

回答

2

的操作方法需要一个参数,因此选择必须

#selector(reachabilityChanged(_:)) // self is not needed 

而且本身应该是

func reachabilityChanged(_ notification: Notification) { 
+0

我已经改变了代码到你。但它不起作用。 – da1lbi3

+0

尝试使用基于块的API。 – vadian

+0

你是什么意思?我已经在此页面上使用了示例 - 通知:https://github.com/ashleymills/Reachability.swift – da1lbi3

0

选择的方法是错误的

改变这种

NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged),name: ReachabilityChangedNotification,object: reachability) 

NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(_:),name: ReachabilityChangedNotification,object: reachability) 

我希望这会起作用。

func reachabilityChanged(note: NSNotification) { 

func reachabilityChanged(note: NSNotification) { 
+0

它不起作用。更改网络时不会调用该函数。 – da1lbi3

+0

已修改,请检查。 –