如何完全删除NSTimer scheduledTimerWithTimeInterval

时间:2016-05-19 22:16:39

标签: ios swift nstimer

我在NSUserDefaults内挥动时间值,当我重复使用ViewController时,我的NSTimer会为时区添加+1

这里是我的更新功能:

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!)")
        }
    }

1 个答案:

答案 0 :(得分:1)

如果您将计时器设置为nil,那么参考会被破坏而您无效,因此您必须先致电invalidate

确保在您创建新计时器时始终检查参考并使其无效,因为这也会破坏对旧计时器的任何引用。

此外,永远不要使用Timer()创建虚拟/占位符计时器,您需要一个可选的引用(?)。