1
我有一個簡單的倒數計時器,每秒更新一個標籤。當點擊主頁按鈕或應用程序被放置在背景中時,如何保持狀態或幻覺?NSTimer:applicationDidEnterBackground:倒計時(如何保持狀態)
我有一個簡單的倒數計時器,每秒更新一個標籤。當點擊主頁按鈕或應用程序被放置在背景中時,如何保持狀態或幻覺?NSTimer:applicationDidEnterBackground:倒計時(如何保持狀態)
實際上,如果您只需要維護計時器,則無需在後臺運行。在您的應用代理的applicationWillTerminate:
中,創建一個包含NSTimer消防時間的NSDictionary,並使用-[NSDictionary writeToFile:atomically:]
將其寫入plist,然後在應用代理的application:didFinishLaunchingWithOptions:
的某處使用-[NSDictionary initWithContentsOfFile:]
讀回。
如果您正在後臺運行,請在applicationDidEnterBackground:
和applicationWillEnterForeground:
中執行相同操作。如果您使用此解決方案,請務必在寫入plist後使計時器無效。
謝謝約翰,我正在嘗試這個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
按住home按鈕時的行爲在iPhone OS 3.x和iOS 4.0中不同。在4.0中,applicationWillTerminate不會被調用,並且您的應用程序(通常)會被放入後臺,定時器不會觸發,但它們不會失效(除非您自己在暫停方法中執行此操作);他們會在你的應用程序被帶回到前臺時再次開始啓動。但是你的應用可能也會被殺死並重新啓動。 – hotpaw2 2010-08-27 23:32:56
在您的MyApp-Info.plist中,具有原始鍵UIApplicationExitsOnSuspend(友好值:應用程序不會在後臺運行)的條目確定調用的是applicationWillTerminate:或applicationDidEnterBackground :.我不相信計時器失效,但我不確定他們是否在後臺開槍。任何已經通過的定時器都可能在應用程序激活時立即啓動。第二代iPod Touch和iPhone 4之間的這種行爲也可能有所不同。 – 2010-08-28 13:29:00