我有一个计时器,一旦它响起,它就会运行来重新启动警报。
alarm = NSTimer.scheduledTimerWithTimeInterval( 60 * minutesConstant + secondsConstant, target:self, selector: Selector("endSession"), userInfo: nil, repeats:false)
它的选择器功能设置一个模式标志,并调用原始功能,该功能使用新的分钟和秒常量设置警报,还向用户发送会话已重新启动的通知。
我有一个菜单项,该菜单项会更新剩余时间
因此,我一直在打开它来检查我的警报确实确实重新启动,并且一旦警报为零便显示通知。它可以工作,但是当我打开菜单并将其降低到零时,它将停留在0:00,并且直到我单击菜单后,计时器才会启动,这时它将立即显示通知并按预期方式重置计时器。
打开菜单后,如何强制计时器启动?这没什么大不了的,但是我不希望用户对会话感到困惑,如果他们看着计时器关闭,会话就会挂起。
您只需将计时器添加到主运行循环中,如下所示:
斯威夫特4.2
RunLoop.main.add(timer, forMode: .common)
迅捷3
RunLoop.main.add(alarm, forMode: .commonModes)
斯威夫特2.x
NSRunLoop.mainRunLoop().addTimer(alarm, forMode: NSRunLoopCommonModes)