当前位置: 首页 > 面试题库 >

在Swift中打开NSMenu时未触发NSTimer

解河
2023-03-14
问题内容

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

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)


 类似资料:
  • 问题内容: 我使用来获取个人资料图片。用户有一个按钮。该按钮触发CamRoll功能。单击该按钮时,将显示法线,但不会调用。在早期版本的Swift / Xcode中,调用了相同的代码。这是我的代码。 为什么不调用该代码? 问题答案: 在Swift 3中, 正确的委托方法如下。 您可以查看苹果之证件上的更多细节。

  • 我正在尝试使用activeMq作为具有开放自由的JMS的代理。我设法在队列中获取消息,但我的激活规范从未触发。我在日志中读到了以下内容。 这是我的server.xml配置jms部分

  • 我试图通过“open package Contents”打开Eclipse。在这之后的终端显示: 我正在使用JDK-8U131-macrosx-x64。我怎样才能打开我的月蚀?

  • 我的sonarQube覆盖测试检测到该代码的捕获块在测试期间从未到达 代码: 我的静态函数ConvertFileToByte()可以抛出一个IOExctive。 相关测试: 我认为问题来自这样一个事实,即“thenThrow”函数是在执行之后完成的,因此永远不会到达catch块。我试图将调用返回与分配分开,但它从未在测试中触发catch函数,并根据sonar添加代码气味。 有什么想法和建议让这个测

  • 我有一个名为的类,它扩展了接口和。但是,当我使用该类并且不调用其方法时,不会触发资源泄漏的警告。我有另一个名为的类,它有一个名为的方法,该方法返回一个对象。当我以以下方式创建新的对象时,不会触发任何资源泄漏警告: 为什么这里没有触发资源泄漏的警告,因为从未关闭?这里的答案是,触发它所需要的只是实现接口,但我的类同时实现了和,但在未关闭时不会触发任何警告。

  • 一点背景: 我对也做了同样的操作--创建了一个将添加到源列表的方法,并且每当更新源列表时,它将使用JavaFX线程上的UI等价类更新目标列表: 因此,现在如果我有更新的并且其项属性更新不是在JavaFX线程上,我就可以轻松地获得一个在JavaFX中显示的列表: 所以现在的问题是: 我的预期是,当显示在中时,只要值发生更改,它就会更新,但预期的行为只持续几秒钟,之后ListView停止更新,这是因为