如何使多次启​​动的NSTimer无效

时间:2015-12-04 11:56:35

标签: ios swift nstimer

我在Swift中创建了一个练习项目,以了解class ApplicationController < ActionController::Base #... private def current_ability @current_ability ||= Ability.new(current_user, request. original_url) end end 的工作原理。启动计时器有一个按钮,一个按钮使计时器无效。当我点击每个按钮一次时,它工作正常。但是,当我多次点击开始计时器按钮时,我无法再使其无效。

enter image description here

这是我的代码:

NSTimer

我已经看到了这些问题,但我无法从他们那里收到我的问题的答案(许多人已经过了class ViewController: UIViewController { var counter = 0 var timer = NSTimer() @IBOutlet weak var label: UILabel! @IBAction func startTimerButtonTapped(sender: UIButton) { timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true) } @IBAction func cancelTimerButtonTapped(sender: UIButton) { timer.invalidate() } func update() { ++counter label.text = "\(counter)" } } Obj-C天而且其他人的问题也不同了):

2 个答案:

答案 0 :(得分:5)

如果您想在每次&#34;开始时重置计时器,您可以在timer.invalidate()中启动新计时器之前添加startTimerButtonTapped。点击按钮:

@IBAction func startTimerButtonTapped(sender: UIButton) {
    timer.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
}

我打算用解释进行更新,但@jcaron已经在评论中做了,所以我只是引用他的文字,不需要改变它:

  

每次点击&#34;启动计时器&#34;按钮,你创建一个新的计时器,同时让前一个计时器继续运行,但没有引用它(因为你用你刚刚创建的新计时器覆盖了timer)。在创建新文件之前,您需要使之前的文件无效。

答案 1 :(得分:0)

我建议您按下取消按钮时将计时器设置为nil。 并且不要忘记设置counter = 0 使定时器无效时。