当应用程序进入前台时创建一个新的 Timer 实例?
Creating a new instance of Timer when app enters foreground?
我正在创建一个由用户设置计时器的应用程序。当应用程序进入后台时,timer.invalidate()
。现在我希望计时器在应用程序返回前台时再次启动。当应用程序发送应用程序在前台的通知时,我正在创建另一个计时器实例来执行此操作。但是,它没有触发该功能。
在 Viewdidload()
我正在创建一个计时器:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
RunLoop.current.add(self.timer!, forMode: RunLoop.Mode.common)
然后我收到检查应用程序是在后台还是在前台的通知:
当它进入后台时,我正在使 timer
无效。
@objc func applicationDidEnterBackground() {
let defaults = UserDefaults.standard
let quitTime = Date()
defaults.set(quitTime, forKey: "quitTimeKey") //Storing the time of quit in UserDefaults
timer?.invalidate()
}
当应用程序退出时,我首先检查 timer
是否有效,然后创建一个新的计时器。但是这个定时器好像不起作用。
@objc func appEntersForeground() {
calculateTimeLeft()
if let timer = timer {
if (!timer.isValid)
{
Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
}
}
}
我们将不胜感激!
将您的 timer
属性 声明为 weak
:
weak var timer: Timer?
那么在timer
失效的时候会设置为nil
。然后在创建新的之前检查 timer
是否为 nil
:
@objc func appEntersForeground() {
calculateTimeLeft()
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
}
}
我正在创建一个由用户设置计时器的应用程序。当应用程序进入后台时,timer.invalidate()
。现在我希望计时器在应用程序返回前台时再次启动。当应用程序发送应用程序在前台的通知时,我正在创建另一个计时器实例来执行此操作。但是,它没有触发该功能。
在 Viewdidload()
我正在创建一个计时器:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
RunLoop.current.add(self.timer!, forMode: RunLoop.Mode.common)
然后我收到检查应用程序是在后台还是在前台的通知:
当它进入后台时,我正在使 timer
无效。
@objc func applicationDidEnterBackground() {
let defaults = UserDefaults.standard
let quitTime = Date()
defaults.set(quitTime, forKey: "quitTimeKey") //Storing the time of quit in UserDefaults
timer?.invalidate()
}
当应用程序退出时,我首先检查 timer
是否有效,然后创建一个新的计时器。但是这个定时器好像不起作用。
@objc func appEntersForeground() {
calculateTimeLeft()
if let timer = timer {
if (!timer.isValid)
{
Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
}
}
}
我们将不胜感激!
将您的 timer
属性 声明为 weak
:
weak var timer: Timer?
那么在timer
失效的时候会设置为nil
。然后在创建新的之前检查 timer
是否为 nil
:
@objc func appEntersForeground() {
calculateTimeLeft()
if timer == nil {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
}
}