在iOS 12中下拉通知中心时计时器中断

时间:2018-08-15 08:45:13

标签: ios swift timer notifications

因此,我正在创建一个具有倒数计时器的应用程序。当应用退出时,我正在使用观察者来了解应用是否在后台。如果是这样,我会使计时器无效,并将退出时间存储在userDefaults中。然后,当应用回到前台时,我创建一个新计时器并计算该应用进入后台的时间,并从总持续时间中减去该时间,以获取经过的时间。当应用程序进入后台时,我将时间存储在UserDefaults中:

 @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 (timer == nil)
    {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleCountdown), userInfo: nil, repeats: true)
    }

}

然后我检查经过时间:

func checkElapsedTime() -> Double {
    let currentTime = Date()
    let appQuitTime = UserDefaults.standard.object(forKey: "quitTimeKey") as? Date ?? Date.distantFuture
    let elapsedTime = currentTime.timeIntervalSince(appQuitTime)

    return elapsedTime
}

我还在打印时差:

let timeDifference = checkElapsedTime()
print("timeDifference = \(timeDifference)")

问题:但是,这是一个问题。当我使用该应用程序时,将通知中心上下滑动甚至不到一秒钟,我得到的timeDifference读数为几千秒。

这可能是什么原因?这是iOS 12错误吗?仅当我在应用程序中时将通知中心拉下时,才会发生这种情况。

1 个答案:

答案 0 :(得分:0)

好的,所以我开始工作了。基本上,当您滑下通知中心时,您正在呼叫applicationWillResignActive。因此,我没有使用applicationDidEnterBackground来进行通知,而是调用applicationWillResignActive,它开始正常工作!