Ich möchte einen Timer mit NSUserDefaults speichern, um mein Ziel zu erreichen. Leider, wenn ich versuche, NSDate() mit NSUserDefaults zu speichern, wird es statisch und wird nicht weiter zählen. Mache ich etwas falsch? Wiederum ist es mein Ziel, dass der Timer immer noch funktioniert, egal ob er in den Hintergrund ging oder beendet wurde. Es sollte die aktuelle Zeit gespeichert und mit der verbleibenden Zeit verglichen werden. Hier ist mein Code soweit. Anderer Code, der dieses Problem anspricht, ist in OBJ C und verwendet didEnterBackground, was nicht notwendig ist.So speichern Sie NSTimer mit 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
}
Sie können einen Timer nicht in 'NSUserDefaults' speichern. Siehe diese Frage: http://stackoverflow.com/questions/22628922/how-to-run-ntimer-in-background-beyond-180sec-in-ios-7 – random
Ich las: http://StackOverflow.com/Questions/39753403/how-to-save-nstimer-using-nsuserdefaults-swift? Noredirect = 1 # comment66803063_39753403, und das scheint anders zu sagen. Ich verstehe nur nicht, warum es statisch bleibt. –
Da Ihr Timer Sekunden zählt, warum verwenden Sie nicht die Systemzeit? Speichere die aktuelle Zeit und die verstrichenen Sekunden von deinem Zähler, wenn die App in den Hintergrund wechselt. – vadian