2017-09-13 123 views
0

我有一個問題NetworkReachabilityManagerAlamofire。我試圖測試與此示例代碼的連接:Alamofire - NetworkReachabilityManager無法使用.notReachable

override func viewDidLoad() { 
    super.viewDidLoad() 

    let manager = NetworkReachabilityManager(host: "www.apple.com") 

    manager?.listener = { status in 

    switch status { 

     case .notReachable: 
      print("network connection status - lost") 
     case .reachable(NetworkReachabilityManager.ConnectionType.ethernetOrWiFi): 
      print("network connection status - ethernet/WiFI") 
     case .reachable(NetworkReachabilityManager.ConnectionType.wwan): 
      print("network connection status - wwan") 
     default: 
      break 
    } 
    } 
    manager?.startListening() 
} 

當我試圖關閉wifi,我收到只有空白的迴應。沒有像「網絡連接狀態 - 丟失」之類的響應。

但是,當我試圖打開wifi,我收到結果「網絡連接狀態 - 以太網/ WiFI」,其中是良好的響應。任何想法.notReachable有什麼問題?任何建議表示讚賞。

+0

一個經理,我認爲你的問題是有關管理器實例定義,你可以發佈你在哪裏聲明'讓經理= NetworkReachabilityManager(主機:「www.apple.com」)'方法內? –

+0

@ReinierMelian我更新了我的帖子。所以你可以看到方法在哪裏。 (請記住,我可以將這些代碼移動到不同的方法,它不必只是在viewDidLoad方法中,如果我將它們移動到不同的方法,則它具有與上述相同的問題。) – HotDudeSmith

+0

在您的UIViewController中將manager聲明爲變量然後在viewDidLoad初始化該變量,並讓我知道如果解決您的問題,我使用NetworkReachabilityManager在單身類 –

回答

0

Alamofire「一定要記得保留經理」,所以創建這樣

class A: UIViewController{ 

let manager = NetworkReachabilityManager(host: "www.apple.com") 

override func viewDidLoad() { 
super.viewDidLoad() 

// before start listening you can check 
if (manager?.isReachableOnEthernetOrWiFi == true) 
    { 
    print("internet is available") 
    } 
    else 
    { 
    print("internet is not available") 
    } 

manager?.startListening() 

manager?.listener = { status in 

switch status { 

    case .notReachable: 
     print("network connection status - lost") 
    case .reachable(NetworkReachabilityManager.ConnectionType.ethernetOrWiFi): 
     print("network connection status - ethernet/WiFI") 
    case .reachable(NetworkReachabilityManager.ConnectionType.wwan): 
     print("network connection status - wwan") 
    default: 
     break 
      } 
    }  

} 

} 
+0

我試過了,它根本不起作用。我發現運行應用程序很奇怪,這非常有趣。在我啓動應用程序之前,我先關掉了wifi,然後我啓動了應用程序,它給了我一個空白的迴應。但是,如果我決定在啓動應用程序之前啓動wifi,它會給出響應,但如果我在應用程序啓動時關閉了WiFi,則會顯示響應「網絡連接狀態 - 丟失」。你的項目有同樣的問題嗎?我只是想確定它是否是來自Alamofire NetworkReachabilityManager的錯誤。 – HotDudeSmith

+0

我更新了我的答案,您可以使用經理的「isReachable」屬性檢查互聯網連接。因爲在應用程序啓動之前,互聯網監聽器不可用,爲什麼它會給出空白響應。 –

+0

https://github.com/Alamofire/Alamofire/issues/2275檢查這個問題已經存檔。 –