2017-04-24 72 views
0

所以我爲任務倒數計時器,並且我想知道是否有一種方法來存儲已經過去的時間,以便它可以記錄在應用程序中。因此,例如evertyime,您使用了倒數計時器,您可以將倒計時的時間存儲爲一個生命週期值。使用Swift跟蹤已用時間

  • 倒計時定時器設定的10分鐘
  • 定時器運行5分鐘,30秒,4分鐘,並保留在計時器30 秒。
  • 的經過的會話時間的值(5分鐘,30秒)被存儲 在該應用並加到總

如果重複這一指令確切集合物的總壽命值將是11分鐘。

如果任何人都可以指出我將解釋如何實現這樣的功能的資源的方向,這將不勝感激。

+1

您是否希望在應用程序啓動時堅持這一點? – brandonscript

+0

當用戶背景/殺死應用程序/關閉設備時,您應該考慮是否經過了「邏輯時間」。定時器要小心,因爲它們*不能保證*經過的時間量。用戶也可以修改設備時間設置。 –

+0

嗨brandon,是的,我希望這堅持跨應用程序啓動。 – Trlewi

回答

0

你有幾個選項可供你保存這樣的數字 - 絕對最簡單和最快可能只是使用UserDefaults來存儲/檢索數字。這並不完全是UserDefaults的預期用途,但如果您只是存儲一個TimeInterval,它不會導致任何問題。

裸露的骨頭實現應該是這樣的:

let interval: TimeInterval = 20 //replace with the time from your countdown timer 
UserDefaults.standard.set(interval, forKey: "totalTimeElapsed") 

既然你需要將新時間添加到現有經過的時間,你會做這樣的事情:

let newTimeElapsed: TimeInterval = 20 //replace with time from countdown timer 
let totalSoFar = UserDefaults.standard.double(forKey: "totalTimeElapsed") //will be 0 if it doesn't exist 
UserDefaults.standard.set(newTimeElapsed + totalSoFar, forKey: "totalTimeElapsed") 

其他標準的方法,你可以做到這一點將是NSKeyedArchiverCore Data,但Core Data將持續1號碼的主要矯枉過正。

+0

那麼它不僅僅是一個單一的實例,這將繼續發生的所有未來的應用程序的實例。如果用戶沒有完成倒計時呢?我不想存儲計時器總計,只有實際花在完成任務上的時間 – Trlewi

+0

@Trlewi是的,這將持續在應用程序的啓動。您需要確定計時器停止時已經過了多長時間,並在我的示例中使用該數字代替'newTimeElapsed'。那只是一個佔位符。正如你所看到的,在我的例子中,我將新值設置爲以前的總數+每次新的時間。 – creeperspeak