一尘不染

在Swift中打开NSMenu时未触发NSTimer

swift

我有一个计时器,一旦它响起,它就会运行来重新启动警报。

alarm = NSTimer.scheduledTimerWithTimeInterval(
    60 * minutesConstant + secondsConstant,
    target:self,
    selector: Selector("endSession"),
    userInfo: nil,
    repeats:false)

它的选择器功能设置一个模式标志,并调用原始功能,该功能使用新的分钟和秒常量设置警报,还向用户发送会话已重新启动的通知。

我有一个菜单项,该菜单项会更新剩余时间

在此处输入图片说明

因此,我一直在打开它来检查我的警报确实确实重新启动,并且一旦警报为零便显示通知。它可以工作,但是当我打开菜单并将其降低到零时,它将停留在0:00,并且直到我单击菜单后,计时器才会启动,这时它将立即显示通知并按预期方式重置计时器。

打开菜单后,如何强制计时器启动?这没什么大不了的,但是我不希望用户对会话感到困惑,如果他们看着计时器关闭,会话就会挂起。


阅读 243

收藏
2020-07-07

共1个答案

一尘不染

您只需将计时器添加到主运行循环中,如下所示:

斯威夫特4.2

RunLoop.main.add(timer, forMode: .common)

迅捷3

RunLoop.main.add(alarm, forMode: .commonModes)

斯威夫特2.x

NSRunLoop.mainRunLoop().addTimer(alarm, forMode: NSRunLoopCommonModes)
2020-07-07