当我们尝试制作 timeInterval < 0.1 秒的计时器时,模拟器是否存在错误?

Is there a bug with simulator when we trying to make a timer with timeInterval < 0.1 second?

我正在用 Watchkit 制作一个新的秒表应用程序,首先我的应用程序非常简单,如下所示:

首先,我尝试制作一个 playButtonPressed 来启动计时器:

@IBAction func playButtonPressed() {
    println("playButton pressed")
    timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
        startTime = NSDate()


}

我的 updateTimer 函数是这样的:

func updateTimer() {

 duration = NSDate().timeIntervalSinceDate(startTime)
    println("updateTimer: \(dateStringFromTimeInterval(duration))")

    timeLabel.setText(dateStringFromTimeInterval(duration))

}

dateStringFromTimeInterval 函数可以帮助我创建一个持续时间为 TimeInterval 变量的 dateString。

我在调试区域的输出一切正常,我可以在打印输出中看到日期字符串。但是我的标签在设置 timeLabel 方面滞后,您可以在此处看到:

我不知道为什么,谁能帮我解决这个问题,或者它现在可能是 apple watchkit 的一个错误?我不知道它会不会在真实设备上滞后。 谢谢

这里有几个很好的问题。不幸的是,我只有坏消息要告诉你。在过去的几周里,我一直在广泛使用 WKInterfaceTimers,它们有严重的局限性和与之相关的错误。我在这里详细分解了一些回复。

问题 1 - 使用 WKInterfaceDate 作为计时器

Apple 会非常反对这种做法,我毫不怀疑这可能是拒绝的理由。正如@mattt 提到的,您不想使用 NSTimer 来翻转日期值。每次你尝试切换日期标签时,Apple 都会将所有这些更改集中在一起,并通过 WiFi 或蓝牙将它们从 iPhone 上的扩展推送到手表。它这样做是为了优化电池寿命。

正因为如此,您将永远无法以目前的方式在手表上准确显示时间。正确的方法是使用 WKInterfaceTimer.

问题 2 - 使用 WKInterfaceTimer

虽然 WKInterfaceTimer 可以完全满足您的需求,但它们有一些局限性。您的用例的主要一个是它只能达到秒精度,而不是毫秒。其次,计时器非常不准确。我见过它们在 50 毫秒到 950 毫秒之间的任何地方。我已按照此 radar 将此问题提请 Apple 关注。

综上所述,您当前的实现不会非常准确,并且会遭到 Apple 的反对,并且 WKInterfaceTimer 非常不准确,只能执行秒级精度。

抱歉回答不当。 :-(