2011-09-20 33 views
2

我需要保護我的代碼免受可能的錯誤。如果它們出現,那麼沒有必要進一步運行應用程序,所以我需要給用戶帶來一些消息,然後退出應用程序。所以,我檢查的條件,然後將警報:如何在用戶友好的方式出錯後退出應用程序?

if (someError){  
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No database file exist. App will close now." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

而在委託方法我關閉使用NSAssert應用:

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) { 
    NSAssert(0, @"closing"); 
    } 
} 

而且,我已經包含在頭委託協議。然而,應用程序只是帶來了警報,但按下確定後,它只是凍結,我收到一些消息「CoreAnimation:忽略異常:關閉」。我錯過了什麼或者有什麼其他選項退出?

回答

2

你不應該這樣做,這是對蘋果HIG(人機界面指南):

iPhone應用程序不應該退出程序,因爲這樣做看起來像一個崩潰給用戶。

向用戶提供有關發生的錯誤的某種反饋總是會更好,並提供重啓過程而不重新啓動應用程序的方式。但是,如果你真的,真的想要,你可以使用

exit(0); 
+0

好,但爲什麼然後NSAssert退出?我在「開始iOS 4應用程序開發」一書中看到了它的使用,作者展示瞭如何使用SQLite。所提供的示例使用NSAssert關閉嚴重錯誤的應用程序,例如沒有SQLite數據庫文件存在等。 – Centurion

+0

是的,考慮NSAssert作爲安全措施,主要在開發過程中使用,以確保您的應用程序具有一致的狀態。斷言在產品代碼中可能會留在原地......但斷言主要用於處理意外錯誤,而不是您期望在某個時間點發生的錯誤。如有可能,請始終嘗試從錯誤中恢復(例如,使用「重試」按鈕)。 – mja

+0

此外,assert並沒有'清除'關閉0退出代碼,但它會崩潰應用程序(併產生crashlog) - 如果你的應用程序在某些情況下反覆崩潰,甚至可能在審覈過程中被拒絕。 – mja

相關問題