我得到以下代码每1秒重复一次方法,并且它正常工作:
var timer : NSTimer?
override func viewDidLoad() {
super.viewDidLoad()
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(self.timerFired(_:)), userInfo: nil, repeats: true)
}
func timerFired (timer: NSTimer) {
print ("timer fired")
}
上面的代码可以正常工作,直到用户开始在兄弟视图控制器中滚动UIScrollView。在滚动定时器时立即触发'日志停止出现。一旦用户停止滚动并抬起手指,“定时器”就会被触发'日志恢复标记每秒。
注意: 我提到的UIScrollView和兄弟视图控制器与此或其他NSTimer无关。它没有任何关于这个类的参考。
尝试的事情:
我尝试在计时器安排后立即放置此行:
NSRunLoop.mainRunLoop().addTimer(self.timer!, forMode:NSDefaultRunLoopMode)
我还尝试确保所有计时器活动都在主线程上:
dispatch_async(dispatch_get_main_queue(),{
self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(self.timerFired(_:)), userInfo: nil, repeats: true)
})
我确实有其他线程正在运行,如果这似乎与线程相关,但我真的很困惑为什么这种情况在滚动时会发生。