【问题标题】:Cannot stop NSTimer无法停止 NSTimer
【发布时间】:2015-08-28 07:21:20
【问题描述】:

我知道在 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 仍然运行。请帮帮我

编辑对不起,我犯了愚蠢的错误。问题是我创建了另一个新的计时器 var timer。它必须将 self.timer 放入函数 setupTimerForRecord

【问题讨论】:

    标签: ios swift ios8 nstimer


    【解决方案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)
        })
    }
    

    【讨论】:

    • 你是对的。我会尽快接受你的回答。谢谢。
    【解决方案2】:
    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() 之前创建所有其他函数需要的变量。

    【讨论】:

    • 不是我投反对票,而是方法 scheduledTimerWithTimeInterval 将创建并返回一个计时器。它不需要添加 var timer = NSTimer()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2010-11-05
    • 2015-12-08
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多