无法让带有 firedate 的 NSTimer 在 Apple Watch 上正常工作

Cannot get NSTimer with firedate to work properly on Apple Watch

我正在尝试创建一个持续时间为 1 分钟的计时器,它每分钟重复一次,但在实际时间的下一分钟开始时开始(如 5:21:00pm)。根据我在此处找到的类似 post,我正在使用此代码:

@IBAction func switchEnabled(value: Bool) {
    if(value){
        let date = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components([.Year, .Hour, .Minute, .Second], fromDate: date)
        components.minute += 1
        components.second = 0
        let nextMinuteDate = calendar.dateFromComponents(components)
        let doneTimer = NSTimer(fireDate: nextMinuteDate!, interval: 60.0, target: self, selector: Selector("timerDone:"), userInfo: nil, repeats: true)
        NSRunLoop.mainRunLoop().addTimer(doneTimer, forMode: NSDefaultRunLoopMode)
        // still not working properly
    }
    else{
        print("switch off")
        // invalidate timer here
    }
}

我的 timerDone 选择器只打印出 "Done!",但是当我 运行 在 watchOS 2 模拟器上执行此操作并激活开关时,它立即打印完成并且计时器开始计时一分钟,所以它不会等到开火日期。对这里发生的事情有什么想法吗?谢谢

class Test: UIViewController{
   override func viewDidLoad() {
         super.viewDidLoad()
         let date = NSDate()
         let calendar = NSCalendar.currentCalendar()
         let components = calendar.components([.Second], fromDate: date)
         let delayedStart:Double=(Double)(60-components.second)
         let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(delayedStart * Double(NSEC_PER_SEC)))
         dispatch_after(dispatchTime, dispatch_get_main_queue(), {
            NSTimer.scheduledTimerWithTimeInterval(60.0, target: self, selector: Selector("timerDone:"), userInfo: nil, repeats: true).fire()
         })
       }
     func timerDone(myObj:NSObject){
          print("Done")
     }
}
  1. 要恰好在下一分钟后触发,首先您需要获取当前分钟内完成的秒数,然后从 60 中减去它以获得下一分钟。
  2. 一旦这些秒结束,你必须立即开火。
  3. 然后,你知道如何以一定的间隔(在本例中为 60 秒)重复计时器。

如果您遇到任何困难,请告诉我。