我已经设置了NSTimer并尝试使其无效,但计时器仍会触发选择器。我已经尝试过许多线程建议并设置并使主线程上的计时器无效。
答案 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()
的文档说
您必须从安装了计时器的线程发送此消息。如果从另一个线程发送此消息,则可能无法从其运行循环中删除与计时器关联的输入源,这可能会阻止线程正常退出。