2017-07-12 191 views
2
- (void)applicationWillTerminate:(UIApplication *)application { 

    NSLog(@"Application is terminating now."); 
} 

當應用程序將要終止時調用此函數,我添加了這個函數只是爲了向我的問題添加一些代碼行。在iOS中,當應用程序在某個階段崩潰並且我們沒有正確處理這種情況時,它會將用戶設置爲移動到主屏幕(在該崩潰應用程序的外部)。 在android中,我看到大多數應用程序中,如果一個人沒有處理崩潰的情況,它會將用戶設置爲移動到主屏幕。 應該有發生崩潰時要調用的任何方法,並且我們可以在該階段調用firstView。 我目前還沒有找到該方法/委託在目標c/swift中。 如果有人知道,你可以在這裏回答。 注:請不要建議使用移動到應用程序崩潰的第一個屏幕/主屏幕

@try { 

} @catch (NSException *exception) { 

} @finally { 

} 

爲我所要求的,我有處理幾乎所有的例外情形正常,但詢問的情況下,如果某些情況下出現故障或一些其他問題的應用意識在任何設備上崩潰什麼是解決方法?

回答

2

您可以捕捉異常導致崩潰與NSSetUncaughtExceptionHandler像這樣前導致崩潰的問題:

func exceptionHandler(exception : NSException) { 
    // Do something before the app is automatically terminated 
    print(exception.callStackSymbols) 
} 

NSSetUncaughtExceptionHandler(exceptionHandler) 

這處理程序將在崩潰之後以及應用程序強制關閉之前調用。 您將無法停止應用程序崩潰,但至少您可以獲取調用堆棧並將其用於日誌記錄並找出發生的事情!

+0

現在這很有趣。這給出了例外的原因,並感謝答覆,但仍然在等待一種可以阻止應用程序崩潰的答案。 –

+0

巴厘島提到,不可能阻止應用程序崩潰。當一個未處理的異常被引發時,系統會接管並讓你別無選擇,除了看它崩潰。 – Thomas

+0

是的,我已經搜查了很多,最後現在我不得不接受你的答案,因爲我發現迄今沒有解決方法。 –

1

你不能這樣做在ios中。在應用程序終止之前調用代理applicationWillTerminate。你不能避免應用程序終止。一旦調用applicationWillTerminate,應用程序將終止。您可以避免崩潰的唯一方法是找出問題&解決它。你能趕上內存警告在didRecieveMemoryWarning,您可以看看在代碼中的異常,這將給你一些的那個崩潰

+0

是的,我知道。我添加這個只是爲了在我的問題中添加一些代碼。我問是否有任何工作? –

+0

不幸的是,除了解決崩潰問題之外,你無法避免這種情況。 – Bali

+0

是的,你是對的。 –

相關問題