2012-12-13 64 views
0

我有一個應用程序,當終止時需要同步一個sqlite數據庫的內容。
要知道應用程序何時終止,我在應用程序委託的applicationWillTerminate:方法中放置了一個斷點。但調試器從不在那裏執行。
我知道兩種方法來終止應用程序:iOS模擬器:應用程序無法終止correcly

  1. 就像我在iPhone上做:保持觸摸應用程序圖標,直到它開始顫抖,我在點擊「X」;
  2. 停止調試器。

無這兩種方法導致調試步驟在applicationWillTerminate:我的應用程序委託的方法。
如果我用第一種方法我甚至得到一個異常:我收到SIGKILL就在這一行:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

好像模擬器啓動SIGKILL即使沒有該信號的處理程序。
最後一條消息是mach_msg_trap。

+1

閱讀文檔:「對於不支持後臺執行的應用程序或者與iOS 3.x或更低版本鏈接的應用程序,此方法總是在用戶退出應用程序時調用。對於支持後臺執行的應用程序,此方法通常不會在用戶退出應用程序時調用,因爲在這種情況下,應用程序只是移動到後臺,但是,在應用程序在後臺運行(未掛起)並且系統需要終止某些應用程序的情況下原因。」 –

+2

@MikeWeller你應該把它作爲一個答案..... –

+0

我太懶惰了:P –

回答

2

從文檔

對於不支持後臺執行或正在 鏈接的是iOS版3.x或更早的時候 用戶退出應用這種方法總是被調用的應用程序。對於支持 後臺執行的應用程序,當用戶退出應用程序時,通常不會調用此方法,因爲在這種情況下應用程序僅移動到 背景。但是,可能會在 應用程序在後臺運行(而不是 掛起)並且系統因某種原因需要終止應用程序的情況下調用此方法。

您可能想要applicationWillResignActive:

+0

有點懷疑在這裏:我是否有義務在應用程序變爲活動狀態時從數據庫加載數據,並在應用程序變爲活動狀態時同步它進入背景?我不知道應用程序何時終止? –

+2

否。如果應用程序在後臺並終止釋放內存(例如),則不會收到通知。你只能處理像'applicationDidEnterBackground:'或'applicationWillResignActive:'這樣的事件。 –

+0

您還應該確保同步不會花費太多時間,否則操作系統會在完成寫入數據庫之前終止應用程序。向操作系統請求額外的時間來完成後臺處理可能是一個不錯的主意,該後臺處理最多可讓您同步數據庫10分鐘。它有助於防止不必要的崩潰,並確保您的數據保持一致 –

相關問題