无法停止 NSTimer

Cannot stop NSTimer

我知道在 Whosebug 上有很多这样的问题,但我是这样的。我仍然无法停止我的 NSTimer。下面是我的代码:

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}

函数停止:

func resetTimmerLabel(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.timer?.invalidate()
        self.timer = nil
        self.timeMin = 0
        self.timeSec = 0
        var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec])
        self.lblTimer.text = timeString
    })
}

函数选择器:

func timeStick(timer: NSTimer){
    print("timeStick")
    self.timeSec++
    if self.timeSec == 60{
        self.timeSec = 0
        self.timeMin++
    }
    var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec])
    lblTimer.text = timeString
}

在单击按钮时调用 setupTimerForRecordresetTimmerLabelviewWillDisappear 但函数 timeStick 仍然 运行。请帮助我

编辑 抱歉我犯了愚蠢的错误。问题是我创建了另一个新的 one timer var timer。它必须self.timer进入函数setupTimerForRecord

var timer = NSTimer()

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
       self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}

全局创建定时器变量。我的意思是在所有功能之外。最佳实践是通常在其他功能需要的 viewDidLoad() 之前创建所有变量。

我认为这是因为您在 setupTimerForRecord() 中创建了一个名为 timer 的重复局部变量。改为将其设置为 self.timer。

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}