Я запускаю таймер в определенное пользователем время. Если я установил это на 1 минуту и запустил его, таймер пропустит 59-ю секунду и начнет с 58 после некоторой задержки. Когда я покидаю представление и возвращаюсь, он восстанавливает таймер с удалением прошедшей разности, но снова занимает второе место, поэтому он может сделать таймер совершенно неточным!Таймер пропускает свою первую секунду каждый раз, когда его увольняют?
Любая идея, почему это может произойти? Ниже суть моего Таймеры кода, я могу предоставить любой широкий код, необходимый, если это разве достаточно:
func createTimer(stopDate: Date) {
print("CONSTRUCTING A TIMER")
userDefaults.set(stopDate, forKey: "setStopDate")
restTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(RestController.updateRestTimer), userInfo: nil, repeats: true)
}
func updateRestTimer() {
let presentTime = Date()
let stoppedTime = UserDefaults.standard.object(forKey: "setStopDate") as? Date
if stoppedTime?.compare(presentTime) == .orderedDescending {
restRemainingCountdownLabel.text = dateComponentsFormatter.string(from: presentTime, to: stoppedTime!) // this is where that first second is missed
print(stoppedTime as Any)
} else {
self.stopTimer()
userDefaults.set(nil, forKey: "ViewDidChangeTime")
self.restRemainingCountdownLabel.text = "Done"
}
}
let dateComponentsFormatter: DateComponentsFormatter = {
let _formatter = DateComponentsFormatter()
_formatter.allowedUnits = [.minute, .second]
_formatter.unitsStyle = .positional
_formatter.zeroFormattingBehavior = .pad
return _formatter
}()
Таймеры не являются о «точности». – matt