【问题标题】:How can I detect when an NSTimer changes every minute?如何检测 NSTimer 每分钟何时更改?
【发布时间】:2013-09-16 03:16:54
【问题描述】:

我正在使用 NSTimer 以特定的计时器间隔调用方法,通常超过十分钟,但如果有所不同。我有一个计时器标签,显示还剩多少分钟,我试图找出在计时器的分钟值更新时更新该标签的最佳方法。我能想到的唯一两种方法感觉有点老套……

  1. 使用两个计时器,一个用于管理呼叫前的时间量 该方法和一个单独的计时器,每分钟重新创建一次 更新标签。
  2. 使用一个每分钟重新创建的计时器 并手动跟踪已经过去了多少时间,所以我知道什么时候 调用该方法。

还有其他想法吗?

非常感谢您的智慧!

【问题讨论】:

    标签: iphone ios cocoa


    【解决方案1】:

    您可以使用单个 NSTimer 来完成此操作(我想这算作您的选项 #2,但略微扩展):

    • 当您想安排将来调用某个方法时,请计算该方法需要运行的时间targetTime
    • 开始NSTimer 设置在now + 1 minutetargetTime 中的较早者。
    • 当计时器触发时,将当前时间与targetTime 进行比较。如果我们在那里,运行目标方法;否则,请再次将计时器重新安排在now + 1 minutetargetTime 中的较早者。

    【讨论】:

      【解决方案2】:

      为计时器持续时间实现符合 KVO 的属性,使用自定义设置器使计时器无效(如果已经存在),将其丢弃,并创建并安排具有新持续时间的新计时器。

      (或者,观察另一个拥有计时器的对象的属性。一个对象持有时间间隔,另一个持有计时器。然后您可以保留合成的设置器;您可以在观察者方法中创建/重新创建计时器.)

      然后,在拥有该字段的控制器中,观察该属性,并在属性更改时更新该字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 2016-09-17
        • 1970-01-01
        • 2018-05-09
        • 2021-06-18
        • 1970-01-01
        相关资源
        最近更新 更多