无法阻止NSTimer

时间:2015-08-28 07:21:21

标签: ios swift ios8 nstimer

我知道有很多关于stackoverflow的问题,但对我而言。我仍然无法阻止我的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
}

在点击按钮时调用 setupTimerForRecord viewWillDisappear 上的 resetTimmerLabel ,但 timeStick 功能仍在运行。请帮帮我

编辑 SORRY因为我的愚蠢错误。问题是我创建了另一个新的计时器var计时器。它必须自我进入函数 setupTimerForRecord

2 个答案:

答案 0 :(得分:1)

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()之前创建所有变量,通常在其他函数中需要这些变量。

答案 1 :(得分:1)

我认为是因为你在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)
    })
}