ios – 无法识别的选择器发送到实例NSTimer Swift

前端之家收集整理的这篇文章主要介绍了ios – 无法识别的选择器发送到实例NSTimer Swift前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试开发一个包含简单秒表功能的应用程序.我正在使用 Xcode 6和 Swift语言.这是FirstViewController中的代码
  1. @IBAction func Stopwatch (Sender:UIButton) {
  2.  
  3. var startTime = NSTimeInterval()
  4.  
  5. func updateTime(timer:NSTimer) {
  6.  
  7. //Find Current TIme
  8.  
  9. var currentTime = NSDate.timeIntervalSinceReferenceDate()
  10.  
  11. //Find the difference between current time and start time
  12.  
  13. var elapsedTime :NSTimeInterval = currentTime - startTime
  14.  
  15. //calculate the minutes in elapsed time.
  16. let minutes = UInt(elapsedTime / 60.0)
  17. elapsedTime -= (NSTimeInterval(minutes) * 60)
  18.  
  19. //calculate the seconds in elapsed time.
  20. let seconds = UInt(elapsedTime)
  21. elapsedTime -= NSTimeInterval(seconds)
  22.  
  23. //find out the fraction of milliseconds to be displayed.
  24. let hours = UInt(elapsedTime * 100)
  25.  
  26. let strMinutes = minutes > 9 ? String(minutes):String(minutes)
  27. let strSeconds = seconds > 9 ? String(seconds):String(seconds)
  28. let strHours = hours > 9 ? String(hours):String(hours)
  29.  
  30. //assign text to Label
  31. elapsedTimeLabel.text = "You have slept for \(strHours)"
  32. }
  33.  
  34. //Timer
  35. var timer = NSTimer.scheduledTimerWithTimeInterval(0.5,target: self,selector: Selector("updateTime:"),userInfo: nil,repeats: true)
  36. startTime = NSDate.timeIntervalSinceReferenceDate()
  37.  
  38. }
  39. }

每次我运行应用程序(在iOS模拟器中)时,按下按钮时应用程序崩溃(执行秒表功能).错误总是会读取

  1. 2014-11-23 11:44:53.617 Sleep[9630:644637] -[Sleep.FirstViewController updateTime:]:
  2. unrecognized selector sent to instance 0x7ff6d9676e80
  3. 2014-11-23 11:44:53.622 Sleep[9630:644637] *** Terminating app due to uncaught exception
  4. 'NSInvalidArgumentException',reason: '-[Sleep.FirstViewController updateTime:]: unrecognized
  5. selector sent to instance 0x7ff6d9676e80'
  6. *** First throw call stack:

我不知道为什么会这样,我对iOS编程很新,所以请帮忙!

解决方法

让updateTime成为一个类方法.
如果它是在一个纯粹的Swift类中,你需要在@objc前面说明该方法的声明,如:
  1. class A {
  2. @objc func updateTime(timer:NSTimer) {
  3.  
  4. }
  5. }

猜你在找的iOS相关文章