2014-04-16 83 views
5

我很困惑,由於缺乏例子,所以我在我的appDelegate的didFinishLaunching這樣做:AFNetworkReachabilityManager說,沒有網絡

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
bool isThere = [[AFNetworkReachabilityManager sharedManager] isReachable]; 

而且總是返回false,儘管網絡在那裏和工作。

兩個問題:

1)如果我不希望在狀態的改變,我需要startMonitoring?

2)在閱讀isReachable之前,您有什麼需要做的嗎?你需要等待嗎?

回答

14

我知道現在回答太遲。如果有人在尋找這個。

確定網絡狀態需要很少的時間。 因此,打電話isReachable啓動監視後將始終返回虛假

您可以撥打isReachablesetReachabilityStatusChangeBlock;

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){ 
      NSLog(@"status changed"); 
     //check for isReachable here 
    }]; 
+0

優秀的解決方案,不是太晚了! –

0

isReachable是由蘋果API SCNetworkReachabilityGetFlags完成。這是一個塊調用,所以AFN調用它在後臺隊列:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ 
    SCNetworkReachabilityFlags flags; 
    if (SCNetworkReachabilityGetFlags(self.networkReachability, &flags)) { 
     AFPostReachabilityStatusChange(flags, callback); 
    } 
}); 

如果試圖https://github.com/tonymillion/Reachability你得到的結果馬上即可。但當然這可能會導致這樣的問題,main thread blocked on SCNetworkReachabilityGetFlags

-(BOOL)isReachable 
{ 
    SCNetworkReachabilityFlags flags; 

    if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) 
     return NO; 

    return [self isReachableWithFlags:flags]; 
}