我有2個viewControllers在我的應用程序,從第一個視圖,當我導航到下一個有一個名爲startTimer的按鈕與一個定時器動作作爲選擇器方法點擊startTimer計時器啓動HH:mm:ss格式,我不是無效的計時器,但當我回到第一viewController和再次如果我再次來到第二viewController,如果我按下startTimer按鈕計時器再次從0開始,但我希望它保留以前的值,我怎麼能做到這一點?我知道,因爲我再次加載viewController的筆尖將被加載到內存,但我怎麼能保留計時器的標籤和計時器的價值? 任何幫助提前感謝,謝謝。如何保持NSTimer活着?
回答
不要這樣做,這種方式每次加載包含NSTimer的視圖時,都會創建一個新的NSTimer對象,而舊的對象仍在內存中,因爲您沒有使其失效。
最好的方法是,您必須將NSTimer放入應用程序委託中,然後僅在第一次加載該View Controller時才啓動它。
爲了實現這一點,您必須添加一個標誌來檢查視圖是否第一次加載。
如果NSTimer是你的實例變量之一,我想你可以做一個檢查,看看它是否被分配。
//NSTimer *timer; declare this in your interface
if (timer==nil)
{
// allocate timer
}
//Do nothing if it is allocated all ready
您已經通過將數據放入視圖控制器來打破MVC(模型 - 視圖 - 控制器)。而且,你所要求的機制沒有關於時間的堅定承諾(NSTimer
)來跟蹤你的時間。 NSTimer
不會在請求的時間間隔內觸發恰好爲。它可以在該時間間隔之後的任意點觸發。
使用
(最後一點被誇大了,一個重複的計時器正確地調度自己,所以通常不會浪費時間,如果重複被完全跳過,在長時間滾動或其他可以保持定時器觸發的事件中, )NSTimer
作爲秒錶幾乎總是會失去時間(有時相當長時間,特別是如果有滾動視圖時)。
創建一個新的模型對象來保存秒錶信息。我們稱之爲Stopwatch
。假設你需要它可以啓動和停止,它需要一個NSTimeInterval accumulatedTime
屬性和一個NSDate lastStarted
屬性(如果你願意,你也可以使lastStarted
爲)。因此,要啓動秒錶,請將lastStarted
設置爲「now」。要停止秒錶,請清除lastStarted
並將當前累計時間移至accumulatedTime
。要查看當前時間,請將accumulatedTime
添加到now - lastStarted
。
好的,現在你已經有了,你可以用它做什麼?您可以將它傳遞給您的視圖控制器,他們可以詢問「當前秒錶值是多少?」他們可以隨意啓動和停止它。
現在你的視圖控制器想要每秒更新它的顯示,所以你有一個計時器來做到這一點。它每秒鐘都會詢問秒錶「當前時間是什麼」,並顯示它。但它沒有設置的時間。它只是問。
順便說一下,你也可以在Stopwatch
上使用KVO,但它有點棘手,因爲Stopwatch
需要運行自己的計時器來發送更改通知。我通常覺得比它的價值更麻煩。
我會做的是將第二個視圖控制器作爲您的第一個視圖控制器的ivar。這樣,您可以僅實例化一次,並且您的NSTimer將保留在內存中。但是,如果你想保持你的風格,你應該保存當前時間的任何一種喜好(看[NSUserDefaults standardUserDefaults]
或創建你自己的單身人士課程)。然後在視圖中從你的第二個視圖控制器加載方法,加載該值並將其添加爲您的定時器的偏移量。
希望能幫到你!
- 1. 如何保持會話活着
- 2. 如何保持WCF服務活着?
- 3. 如何保持活着請求
- 4. 如何保持HTTP連接活着?
- 5. 保持ASP.NET會話活着
- 6. 保持WebSocket連接活着
- 7. 保持父進程活着
- 8. nodejs exec保持shell活着?
- 9. 保持PInvoked方法活着
- 10. 保持會話活着C#
- 11. PHP保持進程活着
- 12. 保持機器人活着
- 13. 保持會話活着
- 14. 保持活着WCF進程
- 15. Tcp連接保持活着
- 16. 保持會話活着MVC3
- 17. 保持連接活着嗎?
- 18. 重複連接:保持活着,保持活躍
- 19. 如何確保或保持套接字活着?
- 20. PHP nusoap(webservice)保持類活着+ C#
- 21. node.js保持活着的網頁
- 22. 保持Java藍牙連接活着
- 23. 關閉後保持線程活着(Silverlight)
- 24. 在Ruby腳本中保持sudo活着
- 25. 保持我的進程活着 - 總是
- 26. 使用bindService保持android服務活着
- 27. Python的保持插座連接活着
- 28. 試圖保持代表活着
- 29. 在使用Quartz.Net時保持kestrel活着
- 30. 在移動Safari中保持WebSocket活着