2011-04-22 45 views
0

可能重複:
How to check for an active Internet Connection on iPhone SDK?代碼來檢查網絡是否有或沒有爲iPhone

我很擔心,如果這個代碼將被蘋果用於檢查網絡連接是否存在被批准。

現在是這段代碼是好的,還是我還錯過了什麼?編輯代碼:

Reachability* reachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; 
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; 

if(remoteHostStatus == NotReachable) { NSLog(@"not reachable");} 
else if (remoteHostStatus == ReachableViaWWAN) { NSLog(@"reachable via wwan");} 
else if (remoteHostStatus == ReachableViaWiFi) { NSLog(@"reachable via wifi");} 
+0

當然,它會被批准。這只是不會做你期望的。 – 2011-04-22 13:57:51

+0

連接的NSString在你的代碼中不會等於NULL。你爲什麼用等待?等待塊當前線程,如果你在你的主線程上運行這個線程,你將阻塞它。此外,這不是檢查NSString *連接和如果(連接== NULL)互聯網可用性 – 0x8badf00d 2011-04-22 14:00:58

+3

互聯網不存在:有人偷了它。 – Albireo 2011-04-22 14:01:19

回答

1

您應該看看Apple的Reachability,一個用於檢測互聯網存在的類。

但是,蘋果的課程寫得很差,所以其他人會自己去清理它。這個類是書面的安德魯·多諾霍作爲一個下拉更換爲蘋果的可達性類:

http://blog.ddg.com/?p=24


如果你真的想用自己的方法,這裏是一個改進版本:

NSURL  *requestUrl = [NSURL URLWithString:@"http://www.something.com"]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:requestUrl]; 
NSData  *loadTest = [NSData dataWithContentsOfURL:requestUrl]; 

if (loadTest == nil) { 
    NSLog(@"No internet"); 
} else { 
    [localwebView loadRequest:requestObj]; 
    [localwebView release]; 
} 
+0

嗨sudo你認爲什麼,我的代碼將被批准或不? – prajakta 2011-04-22 13:59:33

+0

如果你堅持使用你的代碼,首先你應該拋棄'wait(20);'。沒有必要等待,只要URL被加載(或沒有加載如果沒有互聯網),它將移動到如果你想看看你是否有互聯網,你可以這樣做:'NSURL * requestUrl = [NSURL URLWithString:@「http://www.ggg.php」] ; NSURLRequest * requestObj = [NSURLRequest requestWithURL:requestUrl];',並檢查'​​requestObj'是否爲nill而不是你正在做的整個字符串業務 – 2011-04-22 14:03:00

+0

根據你的exp你認爲這個代碼與他們其他我會改變它到一個可以讓我知道 – prajakta 2011-04-22 14:12:27

0

更好的實現方法是使用異步請求。這樣,你不會阻止主線程,並且不會冒險讓操作系統殺死該應用程序。

如果沒有互聯網你會得到委託方法的實例回調:connection:n didFailWithError:

可達性是做它,因爲它有效地使另一個請求,以測試是否有互聯網的懶辦法。這意味着當有互聯網可用時,您將不必要地提出兩個請求。

stringWithContentsOfURL是一個同步調用。使用initWithRequest:delegate:轉移到異步請求。

另外,你也可以看看ASI。它們是NSURL方法的一個很好的包裝。

相關問題