Печать на консоль, когда WKInterfaceTimer достигает 0

Я хочу видеть, что моя программа знает, когда таймер сделан. Я использую WKInterfaceTimer в Xcode 7 Beta 3 (7A152u). "Tick Tock" печатает на консоли, пока счетчик начинает обратный отсчет. Но когда он достигает 0, "Timer Done" не печатается.

    @IBOutlet var myTimer: WKInterfaceTimer!

    @IBAction func startButton() {
        myTimer.start()
        myTimer.setDate(NSDate(timeIntervalSinceNow: 4)) // Arbitrary 4 second coundown.

        // Impliment an alert.
        if myTimer == 0 {
            print("Timer Done")

        } else {
        print("Tick Tock")

    }
}

2 ответа

Решение

То, что ты сделал, неправильно. После звонка setDate таймер начинает обратный отсчет. Чтобы получить информацию о текущем состоянии таймера, вы должны создать его экземпляр. NSTimer и проверьте, когда оно срабатывает.

Из документации Apple:

Чтобы узнать, когда таймер достигнет 0, настройте объект NSTimer с той же целевой датой, которую вы использовали для установки таймера.

Это решение, которое я придумал. Прямо сейчас предупреждение в конце таймера просто выводится на консоль с надписью "Готово". Большое спасибо пользователю Prawn за то, что я использовал часть его кода в этом решении.

import WatchKit
import Foundation

var myTimer : NSTimer?
var elapsedTime : NSTimeInterval = 0.0
var startTime = NSDate()
var duration : NSTimeInterval = 4.0 //Arbitrary 4 seconds to test timer.


class InterfaceController: WKInterfaceController {

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration))

}


override func willActivate() {
    super.willActivate()

}

@IBOutlet var WKTimer: WKInterfaceTimer! //The WatchKit timer the user sees

@IBAction func startButton()  { //Start button

    NSTimer.scheduledTimerWithTimeInterval(duration, target: self, selector: ("timerDone"), userInfo: nil, repeats: false)
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration ))
    WKTimer.start()

}


//Reset button resets the timer back to the original time set.
@IBAction func resetButton() {
    WKTimer.stop()
    WKTimer.setDate(NSDate(timeIntervalSinceNow: duration))

}


func timerDone() {
    print("Done")

}


override func didDeactivate() {
    // This method is called when watch view controller is no longer visible
    super.didDeactivate()
}

}
Другие вопросы по тегам