即使在尝试主线程解决方案后,NSTimer也不会失效

时间:2016-06-07 19:42:07

标签: swift nstimer

我已经设置了NSTimer并尝试使其无效,但计时器仍会触发选择器。我已经尝试过许多线程建议并设置并使主线程上的计时器无效。

3 个答案:

答案 0 :(得分:1)

通过在重新实例化之前使计时器失效来解决问题。

之前:

    self.timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(self.hide), userInfo: nil, repeats: false)

后:

    self.timer?.invalidate()
        self.timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(self.hide), userInfo: nil, repeats: false)

答案 1 :(得分:0)

我遇到了同样的问题。这是唯一对我有用的东西:

启动计时器:

NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector:#selector(timerMethod), userInfo:nil, repeats: false)

然后在timerMethod中:

func timerMethod() {
     // do what you need to do

     if (needs to be called again) {

         NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector:#selector(timerMethod), userInfo:nil, repeats: false)        
     }
}

这是我开始工作的唯一方式。取自这里:NSTimer doesn't stop这是莫娜的答案。

答案 2 :(得分:0)

如果你在一个单独的线程上创建它,它就不会失效。

invalidate()的文档说

  

您必须从安装了计时器的线程发送此消息。如果从另一个线程发送此消息,则可能无法从其运行循环中删除与计时器关联的输入源,这可能会阻止线程正常退出。