2014-07-15 4 views
5

ich einen Laufzeitfehler zu bekommen:Wie Fix Fehler mit einem Swift NSTimer Aufruf Sein Selector

2014-07-15 16: 49: 44,893 TransporterGUI [1527: 303] - [_ TtC14TransporterGUI11AppDelegate printCountdown]: unerkannt Selektor gesendet Instanz 0x10040e8a0

wenn ich den folgenden Swift-Code verwenden, um einen Timer Feuer:

@IBAction func schedule(sender : AnyObject) { 

    var startTime = startDatePicker.dateValue.timeIntervalSinceDate(NSDate()) 
    var endTime = endDatePicker.dateValue.timeIntervalSinceDate(startDatePicker.dateValue) 
    var startDate = NSDate.date() 
    let params = ["startTime": startTime, "startDate": startDate] 

    var counter = NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector:Selector("printCountdown"), 
     userInfo:params, repeats:true) 
} 

func printCountdown(timer: NSTimer) { 

    var userInfo = timer.userInfo as NSDictionary 
    var startTime = userInfo["startTime"] as NSTimeInterval 
    var startDate = userInfo["startDate"] as NSDate 

    var elapsedTime: NSTimeInterval = NSDate.date().timeIntervalSinceDate(startDate) 
    var remainingTime: NSTimeInterval = startTime - elapsedTime; 

    if (remainingTime <= 0.0) { 
     timer.invalidate() 
     transferLabel.title = "No transfer scheduled" 
    } 

    transferLabel.title = remainingTime.description 

} 

Seltsamer, wenn ich die Signatur der Funktion printCountdown ändern keine Parameter zu haben, die Funktion in geeigneter Weise genannt wird , aber dann habe ich keinen Weg zu acce Das Timer-Objekt, das den Anruf ausgelöst hat.

Vielen Dank im Voraus!

+1

Das Ändern des Selektors ist der Fehlerpunkt. Die vollständige Form von printCountdown ist 'printCountdown:'. Die Auswahlzeichenfolge ist falsch. – CodaFi

Antwort

6

Ihr Selektor sollte "printCountdown:" sein, mit einem abschließenden Doppelpunkt, um anzuzeigen, dass der Selektor einen Parameter akzeptiert.