2010-08-27 112 views

回答

2

實際上,如果您只需要維護計時器,則無需在後臺運行。在您的應用代理的applicationWillTerminate:中,創建一個包含NSTimer消防時間的NSDictionary,並使用-[NSDictionary writeToFile:atomically:]將其寫入plist,然後在應用代理的application:didFinishLaunchingWithOptions:的某處使用-[NSDictionary initWithContentsOfFile:]讀回。

如果您正在後臺運行,請在applicationDidEnterBackground:applicationWillEnterForeground:中執行相同操作。如果您使用此解決方案,請務必在寫入plist後使計時器無效。

+0

謝謝約翰,我正在嘗試這個http://stackoverflow.com/questions/1587918/is-it-possible-to-save-the-state-of-a-timer-in-the-user-defaults 。相當困惑,但按下主頁按鈕時,應用程序會進入後臺還是終止?還有在後臺時,NSTimers會失效嗎? – Ronn 2010-08-27 21:12:49

+0

按住home按鈕時的行爲在iPhone OS 3.x和iOS 4.0中不同。在4.0中,applicationWillTerminate不會被調用,並且您的應用程序(通常)會被放入後臺,定時器不會觸發,但它們不會失效(除非您自己在暫停方法中執行此操作);他們會在你的應用程序被帶回到前臺時再次開始啓動。但是你的應用可能也會被殺死並重新啓動。 – hotpaw2 2010-08-27 23:32:56

+0

在您的MyApp-Info.plist中,具有原始鍵UIApplicationExitsOnSuspend(友好值:應用程序不會在後臺運行)的條目確定調用的是applicationWillTerminate:或applicationDidEnterBackground :.我不相信計時器失效,但我不確定他們是否在後臺開槍。任何已經通過的定時器都可能在應用程序激活時立即啓動。第二代iPod Touch和iPhone 4之間的這種行爲也可能有所不同。 – 2010-08-28 13:29:00