2012-03-30 86 views
1

我試圖讓我的iPhone應用程序更健壯,確保它不會在沒有網絡連接時崩潰。現在,應用程序嘗試立即通過應用程序委託在啓動時建立連接。如果WiFi或手機可用,它沒有問題,但如果沒有可見的網絡連接,它將會崩潰。我在這個網站上四處瀏覽,並沒有發現任何適合我的問題的東西。我有一種感覺,應該是代碼只是一個簡單的線條,像Objective-C的相當於僞「isConnection」,或其他類似的:ios診斷iphone連接狀態

if (isConnection) { 
    - sendSynchronousRequest for json data I'm using 
    - manipulate the data, etc., and continue with normal operations 
} else { 
    - send an output message to a view controller, 
     letting the user know what's wrong. 
} 

我似乎無法隔離(當然摘要)我正在尋找的「isConnection」條件,具體而言。有沒有人有這方面的經驗或建議?

回答

0

可達性類非常易於使用。下載類文件在這裏https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

您還需要添加SystemConfiguration.framework

下面的代碼,你需要:

-(BOOL)isConnection { 
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"]; 
    //replace www.google.com with your own host you're checking for 
    NetworkStatus hostStatus = [reach currentReachabilityStatus]; 
    if (hostStatus != NotReachable) { 
     //There are also other status enums like 
     //ReachableViaWiFi 
     //ReachableViaWWAN (3G/LTE) 
     //if you need to detect if user is on cellular, act accordingly 
     return YES; 
    } 
    return NO; 
} 

然後,你可以打電話給你的方法:

if ([self isConnection]) { 
    //do something 
} else { 
    //no connection, inform user 
} 
+0

謝謝,這非常好!正是我在找什麼。 – pereirap 2012-04-09 02:35:04

+0

爲什麼你不接受我的答案?你接受的人發佈了一個項目鏈接,但沒有示例代碼。 – Justin 2012-04-13 19:43:52

+0

對不起 - 我甚至都沒有意識到我所做的 - 你的回答也有助於我對這個問題的理解。我甚至不知道什麼是不接受的意思......好的,那是綠色的複選標記嗎?我現在就檢查一下,讓我知道如何撤消我所做的任何事情!我根本不是故意要解僱你的!抱歉!我只是這個網站關心的一個新手。 – pereirap 2012-04-13 21:30:06

0

您可以使用Apple在Reachability sample application中提供的Reachability類。它不僅告訴你你是否連接,但你如何連接(WiFi,蜂窩或根本沒有連接)。連接狀態改變時,您甚至可以註冊通知。

儘管在啓動上面描述的代碼之前,您可以使用它來檢查連接狀態,但我仍然認爲您應該調查爲什麼當您沒有連接時應用程序崩潰並嘗試解決它。在請求嘗試過程中,您可能會始終失去連接,而且您也不希望導致應用程序崩潰。