Sto provando a sviluppare un'applicazione che include una funzione di cronometro semplice. Sto usando Xcode 6 e la lingua Swift. Ecco il codice in FirstViewControllerSelettore non riconosciuto inviato all'istanza NSTimer Swift
@IBAction func Stopwatch (Sender:UIButton) {
var startTime = NSTimeInterval()
func updateTime(timer:NSTimer) {
//Find Current TIme
var currentTime = NSDate.timeIntervalSinceReferenceDate()
//Find the difference between current time and start time
var elapsedTime :NSTimeInterval = currentTime - startTime
//calculate the minutes in elapsed time.
let minutes = UInt(elapsedTime/60.0)
elapsedTime -= (NSTimeInterval(minutes) * 60)
//calculate the seconds in elapsed time.
let seconds = UInt(elapsedTime)
elapsedTime -= NSTimeInterval(seconds)
//find out the fraction of milliseconds to be displayed.
let hours = UInt(elapsedTime * 100)
let strMinutes = minutes > 9 ? String(minutes):String(minutes)
let strSeconds = seconds > 9 ? String(seconds):String(seconds)
let strHours = hours > 9 ? String(hours):String(hours)
//assign text to Label
elapsedTimeLabel.text = "You have slept for \(strHours)"
}
//Timer
var timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("updateTime:"), userInfo: nil, repeats: true)
startTime = NSDate.timeIntervalSinceReferenceDate()
}
}
Ogni volta che faccio funzionare l'applicazione (nel simulatore iOS), l'applicazione si blocca quando si preme il pulsante (eseguire la funzione cronometro). L'errore legge sempre
2014-11-23 11:44:53.617 Sleep[9630:644637] -[Sleep.FirstViewController updateTime:]:
unrecognized selector sent to instance 0x7ff6d9676e80
2014-11-23 11:44:53.622 Sleep[9630:644637] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-[Sleep.FirstViewController updateTime:]: unrecognized
selector sent to instance 0x7ff6d9676e80'
*** First throw call stack:
Non ho idea perché questo sta accadendo e sono abbastanza nuovo di programmazione iOS, quindi per favore aiuto!
Il flag @objc non sembra essere necessario, almeno a partire da Swift 1.2. Tuttavia, mi sono imbattuto nello stesso errore perché la mia firma del selettore era sbagliata. Deve essere configurato per ricevere un NSTimer. per esempio. 'func mySelector (timer: NSTimer)' –