Ios 当应用程序进入前台时创建计时器的新实例?

Ios 当应用程序进入前台时创建计时器的新实例?,ios,swift,timer,elapsedtime,Ios,Swift,Timer,Elapsedtime,我正在创建一个由用户设置计时器的应用程序。当应用程序转到后台时,计时器将失效()。现在,当应用程序返回前台时,我希望计时器再次启动。我正在创建另一个计时器实例,以便在应用程序发送应用程序位于前台的通知时执行此操作。但是,它没有启动该功能 在Viewdidload()中,我正在创建一个计时器: timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), user

我正在创建一个由用户设置计时器的应用程序。当应用程序转到后台时,
计时器将失效()。现在,当应用程序返回前台时,我希望计时器再次启动。我正在创建另一个计时器实例,以便在应用程序发送应用程序位于前台的通知时执行此操作。但是,它没有启动该功能

Viewdidload()
中,我正在创建一个计时器:

 timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
    RunLoop.current.add(self.timer!, forMode: RunLoop.Mode.common)
然后我会收到通知,检查应用程序是在后台还是在前台:

当它进入后台时,我将使
计时器无效

  @objc func applicationDidEnterBackground() {
    let defaults = UserDefaults.standard
    let quitTime = Date()
    defaults.set(quitTime, forKey: "quitTimeKey") //Storing the time of quit in UserDefaults
    timer?.invalidate()

}
当应用程序返回时,我首先检查
计时器是否有效,然后创建一个新计时器。但这个计时器似乎不起作用

@objc func appEntersForeground() {
    calculateTimeLeft()
    if let timer = timer {
        if (!timer.isValid)
        {
            Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
        }
    }
}


这里的一些帮助将不胜感激

将您的
计时器
属性声明为

weak var timer: Timer?
定时器
无效时,它将被设置为
nil
。然后,在创建新计时器之前,只需检查计时器是否为
nil

@objc func appEntersForeground() {
    calculateTimeLeft()
    if timer == nil {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
    }
}

请显示迄今为止已尝试的代码?将开始时间存储为用户默认值中的
TimeInterval
。当应用程序激活时,用平衡时间启动计时器。我刚刚添加了代码。请查收。我在userdefaults中存储应用程序进入后台的时间。然后提取该时间并将其与当前时间进行比较,然后从原始时间中减去该时间。只是当应用程序返回前台时计时器不再运行。@Kamran在文章中添加了代码。请查收。在应用程序进入后台之前,我没有使计时器失效,这会导致剩余时间的准确性出现问题。但是现在,在第一个计时器失效后,一旦应用程序返回到前台,我就无法启动另一个计时器。scheduledTimer(时间间隔:1,目标:self,选择器:#选择器(handleCountdown),userInfo:nil,repeats:true)将返回的计时器分配给变量->计时器并检查