2016-10-16 28 views
0

所以,我在我的AppDelegate中有以下內容。
它會在我關閉WIFI時通知我,但在初始運行後不會作出反應。
我曾經有過這個工作。
我在Swift 3上使用Xcode 8以及這個版本的swift和xCode的可達性。我的可達性通知器只能被調用一次

我希望能得到一個解決方案。

謝謝。

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")  
    } 
+0

檢查我的答案 –

回答

-1

嘗試通過nilobject參數addObserver。另外,對於Swift 3,我必須用self.reachability = Reachability.forInternetConnection()

+0

不再有一個forInternetConnection方法。 – BostonMacOSX

+0

我使用Xcode 8,並從[Apple的示例Reachability代碼](https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html)中下載了示例。 Xcode實際上促使我使用'forInternetConnection',它在Swift 3中工作正常。它實際上只是調用系統配置框架。 – EricS

3

初始化Swift 3中的可達性有一些變化。下載最新的Reachability.swift文件並將其添加到您的項目中。 Link

對於斯威夫特2.x的代碼請檢查我的答案here

斯威夫特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到蜂窩和反之亦然,或當網絡連接和斷開,反之亦然。
在我的情況下工作正常。

閱讀documentation更多細節斯威夫特3重大更改部分

製備試樣爲您

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

+1

作出更新...並有相同的結果...在負載上發生火災,有一個互聯網連接...當我禁用無線網絡它不能阻止我...然後當我打開它沒有通知。 ... – BostonMacOSX

+0

男人,你保持你的應用程序在後臺?那麼它的工作在我的情況下,啓用禁用WIFI,禁用互聯網蜂窩電話 –

+0

我只是給一個鏈接到示例,然後讓我知道 –