如何显示NSTimer下一次触发前的秒数

时间:2013-01-07 01:51:46

标签: macos cocoa nstimer

我有一个简单的OSX菜单应用程序,状态项附有一个菜单,我有一个菜单项,可以手动将fire发送到NSTimer。

我希望该菜单项显示下次启动计时器之前的秒数。有没有办法获得下一次火灾或下次解雇NSTimer的时间?

2 个答案:

答案 0 :(得分:4)

NSTimer有fireDate,它返回一个NSDate。 NSDate有timeIntervalSinceNow。

答案 1 :(得分:2)

我知道已经有一个已接受的答案,但我刚刚想到你实际上可能根本不感兴趣fireDate

使用该日期,您只会看到相同的秒数,只要显示时间 - 如果它直接显示在菜单栏中,则没有进度指示......

我建议采用略有不同的方法:

  1. 计算并存储有效期。
  2. 安排一个重复计时器,以与您显示的精确度匹配的间隔触发,并使用存储的到期日期更新剩余时间显示。
  3. 很快,当你通过了失效日期,使计时器无效,然后做你想做的任何事情。
  4. 那么,为什么不使用一秒计时器和递减计数器变量呢?

    简单:NSTimer不是实时的事情。计时器触发的实际日期,其预定的fireDate略有不同。但是,由于重复计时器重新安排而没有调整差异,这些偏差加起来。

    这些偏差完全不可预测,因为它们不仅取决于应用程序的负载,还取决于整个系统。所以它们会在“完全可以忽略”和“ZOMFG”之间变化!