gpt4 book ai didi

ios - 无法让带有 fireate 的 NSTimer 在 Apple Watch 上正常工作

转载 作者:行者123 更新时间:2023-11-30 13:39:03 26 4
gpt4 key购买 nike

我正在尝试创建一个持续时间为 1 分钟的计时器,每分钟重复一次,但从实际时间的下一分钟开始(例如下午 5:21:00)。根据我在这里找到的类似帖子,我正在使用以下代码:

@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选择器只打印出“完成!”,但是当我在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 秒)重复计时器。

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

关于ios - 无法让带有 fireate 的 NSTimer 在 Apple Watch 上正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35785128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com