2013-07-30 69 views
0

我有一個應用程序,無法加載任何東西,如果它沒有訪問互聯網。在我的應用程序委託我用這個代碼:UIAlertView當應用程序沒有互聯網

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    //Check for internet 
    internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; 

    // Internet is not reachable 
    internetReachableFoo.unreachableBlock = ^(Reachability*reach) 
    { 
     // Update the UI on the main thread 
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil]; 
     alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
     [alert show]; 
     exit(0); 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      NSLog(@"Someone broke the internet :("); 

     }); 
    }; 
    [internetReachableFoo startNotifier]; 
    return YES; 
} 

對互聯網的檢查從該響應Link做,然後我要顯示一個警告框,告訴用戶它沒有互聯網不會工作,然後關閉應用程序。目前我有exit(0);,我知道蘋果不會接受,因此我的警報視圖中,我需要確定按鈕關閉應用程序(如果蘋果允許的話)。我的問題是我不知道如何關閉一個應用程序,尤其是使用UIAlert視圖(我對iOS相當新),如果是這種情況顯示警報視圖,我希望應用程序在警報視圖時停止加載其他所有內容如果它沒有互聯網,它就會啓動,因爲應用程序只會崩潰(再次,如果蘋果允許您停止應用程序繼續加載)如何以蘋果認可的方式解決這個問題?

+1

從用戶體驗的角度來看,你試圖做的是一個壞主意。通知用戶沒有互聯網並禁用應用程序的功能,但不要關閉應用程序。 – JeffRegan

+0

我同意這兩個答案(SK9和邁克爾Dautermann)。檢查除了應用程序委託(可能是根視圖控制器)以外的其他地方的可達性,並且不要關閉您的應用程序。只要通知用戶他們需要連接到互聯網,並且在可達性更改爲連接之前不要再進行網絡呼叫。 – JeffRegan

+0

沒問題。謝謝!我只是將它移動到不執行任何功能,直到它連接,而不是關閉應用程序 –

回答

1

不要關閉應用程序。蘋果肯定會拒絕這一點。

另外,通常更好的方式是嘗試請求,並優雅地處理故障。互聯網信號可以是間歇性的,一個失敗不需要破壞它。

6

這裏有一些東西。 1)你應該檢查在某處的可達性其他比「didFinishLaunchingWithOptions」,也許別的地方說...你的第一個視圖控制器?

如果「didFinishLaunchingWithOptions」花費太長時間才能返回,iOS assumes(請參閱例外代碼:0x8badf00d)確定您的應用程序已死並將其殺死。 2)如果你確實把你的可達性代碼放到第一個視圖控制器中,是你可以很容易地調出你的UIAlertView的地方。

例如,將「UIAlertView」實例變量(或ivar)添加到您的視圖控制器。

如果它爲空,繼續做任何視圖正在做的事情。如果它存在(即,如果互聯網已關閉並且正在顯示警報),請暫停視圖控制器中的所有其他功能,直到用戶自行退出爲止。

或....重置用戶將應用程序帶回前臺並自行關閉警報視圖並查看互聯網是否恢復正常。

相關問題