我需要在用戶在應用程序中時以及應用程序在後臺時運行計時器。在應用程序中運行計時器以及應用程序在後臺時
上下文是:如果他在特定的視圖控制器上,5分鐘後將被重定向到主視圖控制器。如果應用停留在後臺並進入應用,計時器應重定向他。任何想法我怎麼能做到這一點?
我需要在用戶在應用程序中時以及應用程序在後臺時運行計時器。在應用程序中運行計時器以及應用程序在後臺時
上下文是:如果他在特定的視圖控制器上,5分鐘後將被重定向到主視圖控制器。如果應用停留在後臺並進入應用,計時器應重定向他。任何想法我怎麼能做到這一點?
由於不支持背景,因此無法使用正常的NSTimer
。然而,使用其他方法很容易實現。
在你的AppDelegate中有兩種方法。 applicationWillResignActive
和applicationDidBecomeActive
。在resign方法中,您只需將當前的NSDate
保存到NSUserDefaults
中,然後在活動方法中檢索並將其與當前的NSDate
進行比較,以獲取應用程序處於非活動狀態的時間量。
代碼示例:
func applicationWillResignActive(application: UIApplication) {
let date = NSDate()
NSUserDefaults.standardUserDefaults().setObject(date, forKey: "DateTimer")
}
func applicationDidBecomeActive(application: UIApplication) {
if let persistedDate = NSUserDefaults.standardUserDefaults().objectForKey("DateTimer") as? NSDate {
let difference = NSCalendar.currentCalendar().components([.Second], fromDate: persistedDate, toDate: NSDate(), options: [])
let differenceSeconds = difference.second
}
}
的另一種方式爲在夫特3這樣做:
先取當前時間(秒),並將其保存用戶默認值
func applicationWillResignActive(_ application: UIApplication) {
let date = NSDate()
let resignTime = Int64(date.timeIntervalSince1970)
UserDefaults.standard.set(resignTime, forKey: "logOutTime")
}
當一個應用程序變爲活動狀態,您可以比較保存至用戶默認值的最後一個活動時間與cu時間。 (注:這兩個元素必須在一個格式)
func applicationDidBecomeActive(_ application: UIApplication) {
if let resignTime = UserDefaults.standard.object(forKey: "logOutTime") as? Int64 {
let date = NSDate()
let currentTime = Int64(date.timeIntervalSince1970)
debugPrint("diff: ", currentTime-resignTime)
let diff = currentTime-resignTime
if diff >= 300{ //checking difference of time which you expect
}
}
}
而這一切。如果條件成立,你可以做任何你想做的事情。