2014-07-15 6 views
5

sto ottenendo un errore di runtime di:Come risolvere l'errore con una Swift NSTimer chiamando il suo selettore

2014/07/15 16: 49: 44,893 TransporterGUI [1527: 303] - [_ TtC14TransporterGUI11AppDelegate printCountdown]: non riconosciuta selettore inviato a un'istanza 0x10040e8a0

quando utilizzare il seguente codice Swift per sparare un timer:

@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 

} 

Stranamente, se cambio la firma della funzione printCountdown avere alcun parametro, la funzione viene chiamata in modo appropriato , ma poi non ho modo di acce ssing the timer object che ha effettuato la chiamata.

Grazie in anticipo!

+1

La modifica del selettore è il punto dell'errore. La forma completa di printCountdown è 'printCountdown:'. La stringa del selettore non è corretta. – CodaFi

risposta

6

Il selettore deve essere "printCountdown:", con due punti di terminazione per indicare che il selettore accetta un parametro.