2015-11-17 69 views
3

我在這個應用程序的幾個視圖中使用AFNetworking Reachability。有一種觀點認爲,有一個奇怪的問題。在每個視圖中,我已開始在loadView[[AFNetworkReachabilityManager sharedManager] startMonitoring]中進行監控,並且在viewDidLoadif([AFNetworkReachabilityManager sharedManager].isReachable)中調用isReachable。AFNetworking Reachability不能識別互聯網連接的第一次

每一次,它都會返回NO,就像沒有互聯網連接一樣,我很確定我有穩定的無線連接(在其他視圖中工作)。

回答

3

在AFNetworking框架中,startMonitoring方法在Background global queue中運行。

在你的情況下,ViewDidLoad方法在完成startMonitoring方法之前被調用,因爲它在不同的隊列中運行。

因此而不是檢查isReachable標誌使用reachabilityStatusChangeBlock像下面

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 

    switch (status) { 
     case AFNetworkReachabilityStatusNotReachable: 
      break; 
     case AFNetworkReachabilityStatusReachableViaWiFi: 
      break; 
     case AFNetworkReachabilityStatusReachableViaWWAN: 
      break; 
     default: 
      NSLog(@"Unkown network status"); 

    } 

}]; 
[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
+0

如何在rootViewController的情況下實現這一點,我只需要檢查是否存在連接? – Stefan

+0

您可以將此代碼放入RootViewController的ViewDidLoad方法中。如果案例AFNetworkReachabilityStatusNotReachable或默認被調用,則沒有網絡連接。但是在AppDelegate中實現這將是一個理想的方式。 –

2

[AFNetworkReachabilityManager sharedManager]是獨立的,並當你調用它的第一次,並且在應用生活會生活它被初始化。

另外它需要一些時間來檢查以太網/無線網絡isReachable

所以,你可以把這個代碼:

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 

AppDelegate,只是檢查,當您需要的以太網連接。

+1

我已經實現了這個,但仍然不能用於rootViewController ... – Stefan