2015-07-19 3 views
1

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

@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") 

    } 
} 
+0

Для начала вам не хватает закрывающей фигурной скобки в конце инструкции 'else'. – aaplmath

+0

Из документации WKInterfaceTimer: * «Чтобы узнать, когда таймер достигает 0, настройте объект NSTimer с той же конечной датой, которую вы использовали для настройки таймера» * –

ответ

0

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

От Apple's Documentation:

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

1

Это решение, с которым я столкнулся. В настоящий момент предупреждение в конце таймера просто печатает на консоли с помощью «Готово». Большое спасибо пользователю 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() 
} 

} 
+0

Не вызывает ли это только метод timerDone, если часы бодрствуют, когда таймер заканчивается? Как вы гарантируете, что вызывается, когда заканчивается время (что может быть, когда приложение с NSTImer спит). – Scott

+0

Эй, Скотт, подумал, что вы или Дэн когда-либо выяснили, как обеспечить его, когда приложение спит. В настоящее время я пытаюсь найти обходное решение. В частности, я надеюсь создать какой-то таймер, который отсчитывает от 3 до 0 и обеспечивает тактильную обратную связь на каждом втором интервале. К сожалению, это работает только в том случае, когда приложение неактивно, поскольку schedTimer() не срабатывает, когда расширение часов спит. – user2623825