2014-12-03 61 views
1

使用可達性api在服務請求之前檢查網絡連接。有時,當網絡太弱時,它會掛起我的應用程序,並在一段時間後獲得狀態。如果關閉我的WiFi立即我得到的狀態,當網絡是適當的,那麼我也立即得到狀態,但當網絡是薄弱的(我的假設)它不會立即給予狀態,並因此給用戶的應用程序被凍結的假設並在某段時間後給出網絡狀態已關閉。如何告訴用戶該應用程序未凍結,但正在檢查可達性?當網絡太弱時,可達性會掛起我的應用程序

InternetConnection *ic=[[InternetConnection alloc] init]; 
if([ic connectedToNetwork]) 
{ 
//do some request 
} 
else 
{ 
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" 
      message:@"Network down" 
      delegate:nil 
                  cancelButtonTitle:AGLocalizedString(@"key_ok",nil) 
               otherButtonTitles:nil]; 
      [alert show]; 
} 


//check internet connection code 
- (BOOL) connectedToNetwork{ 
    Reachability* reachability = [Reachability reachabilityWithHostName:@"google.com"]; 
    NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

    if(remoteHostStatus == NotReachable) 
    { 
     isInternet =FALSE; 
    } 
    else if (remoteHostStatus == ReachableViaWWAN) 
    { 
     isInternet = TRUE; 
    } 
    else if (remoteHostStatus == ReachableViaWiFi) 
    { isInternet = TRUE; 

    } 
    return isInternet; 
} 
+0

給出請求的超時選項? – 2014-12-03 09:50:25

+0

我如何給超時選項? – 2014-12-03 09:53:03

回答

0

它看起來像你調用一個函數synchronously只應異步調用。這是你永遠不應該做的事 - 你看到了結果。

您需要一個存儲當前已知狀態的對象,該狀態已連接,未連接或未知。然後創建一個Reachability對象,在後臺檢查其狀態,並要求它觀察更改。

並確保您正確地進行測試,並且不要給用戶一大堆警報;他們不會高興。

+0

我怎樣才能異步調用它? – 2014-12-03 11:08:33

相關問題