Я хочу сохранить таймер, используя NSUserDefaults, чтобы выполнить мою цель. К сожалению, когда я пытаюсь сохранить NSDate() с помощью NSUserDefaults, он становится статическим и не будет продолжать подсчет. Я делаю что-то неправильно? Опять же, моя цель заключается в том, что таймер все еще работает независимо от того, пошел ли он на задний план или закончил. Он должен сохранить текущее время и сравнить его с тем, сколько времени осталось. Вот мой код до сих пор. Другой код, рассматривающий эту проблему, находится в OBJ C и используется didEnterBackground, что необязательно.Как сохранить NSTimer с помощью NSUserDefaults? Swift
func startTimer() {
// then set time interval to expirationDate…
expirationDate = NSDate(timeIntervalSinceNow: 86400)
dateTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(QOTDVC.updateUI(timer:)), userInfo: nil, repeats: true)
RunLoop.current.add(dateTimer, forMode: RunLoopMode.commonModes)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "TimerAdded"), object: nil)
}
func updateUI(timer: Timer)
{
// Call the currentTimeString method which can decrease the time..
let timeString = currentTimeString()
timerLabel.text = "\(timeString)"
}
func currentTimeString() -> DateComponents {
let unitFlags: Set<Calendar.Component> = [.hour, .minute, .second]
let countdown: DateComponents = Calendar.current.dateComponents(unitFlags, from: defaults.object(forKey: currentTime.description) as! Date, to: expirationDate as Date)
print("this is the \(countdown)")
if countdown.second! > 0 {
} else {
dateTimer.invalidate()
}
return countdown
}
Вы не можете сохранить таймер в 'NSUserDefaults'. См. Этот вопрос: http://stackoverflow.com/questions/22628922/how-to-run-nstimer-in-background-beyond-180sec-in-ios-7 – random
Я читал: http://stackoverflow.com/questions/39753403/how-to-save-nstimer-using-nsuserdefaults-swift? Noredirect = 1 # comment66803063_39753403, и это, кажется, говорит иначе. Я просто не понимаю, почему он остается статичным. –
Поскольку ваш таймер подсчитывает секунды, почему вы не используете системное время? Сохраните текущее время и прошедшие секунды со своего счетчика, когда приложение перейдет на задний план. – vadian