我在 NSUserDefaults
中挥动一个时间值,当我重用 ViewController
时,我的 NSTimer
将 +1 添加到 Interval
这里是我的更新函数:
func fireUpdatedLimit() {
var endTimeSeconds = userDefaults.integerForKey("endTimeSeconds\(currentUserId!)")
if endTimeSeconds > 0 {
endTimeSeconds += 1
userDefaults.setInteger(endTimeSeconds, forKey: "endTimeSeconds\(currentUserId!)")
}
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(ViewController.updateLimit), userInfo: nil, repeats: true)
}
这是我已经尝试过的:
weak var timer = NSTimer()
weak var timer: NSTimer?
self.timer = nil
self.timer.invalidate()
逻辑:
func updateLimit() {
var timeLeft = userDefaults.integerForKey("endTimeSeconds\(currentUserId!)")
foregroundAction() {
self.lockedTimeLabel.hidden = false
self.lockedImageView.hidden = false
}
self.lockedTimeLabel.text = String(fromTimeInterval: Double(timeLeft))
if timeLeft <= 0 {
print("ended")
foregroundAction() {
self.lockedImageView.hidden = true
self.lockedTimeLabel.hidden = true
self.mediaImageView.hidden = true
self.followerImageView.hidden = true
}
self.reloadContent()
userDefaults.setInteger(timeLeft, forKey: "endTimeSeconds\(currentUserId!)")
self.timer!.invalidate()
} else {
timeLeft -= 1
userDefaults.setInteger(timeLeft, forKey: "endTimeSeconds\(currentUserId!)")
}
}
最佳答案
如果您将计时器设置为nil
,那么引用将被破坏并且您无法使它无效,因此您必须先调用invalidate
。
确保在您要创建新计时器时始终检查引用并使其失效,因为这也会破坏对旧计时器的任何引用。
此外,切勿使用 Timer()
创建虚拟/占位符计时器,您需要一个可选引用 (?
)。
关于ios - 如何完全删除 NSTimer SchedulerWithTimeInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334941/