Ios 发送到实例NSTimer Swift的选择器无法识别
我正在尝试开发一款包含简单秒表功能的应用程序。我使用的是Xcode 6和Swift语言。以下是FirstViewController中的代码Ios 发送到实例NSTimer Swift的选择器无法识别,ios,swift,nstimer,stopwatch,Ios,Swift,Nstimer,Stopwatch,我正在尝试开发一款包含简单秒表功能的应用程序。我使用的是Xcode 6和Swift语言。以下是FirstViewController中的代码 @IBAction func Stopwatch (Sender:UIButton) { var startTime = NSTimeInterval() func updateTime(timer:NSTimer) { //Find Current TIme var currentTime = NSDat
@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()
}
}
每次我运行应用程序(在iOS模拟器中),当我按下按钮(执行秒表功能)时,应用程序就会崩溃。错误总是读取
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:
我不知道为什么会发生这种情况,我对iOS编程非常陌生,所以请帮助我 您已将
updateTime
定义为Stopwatch
的本地函数,因此它在其范围之外不可用。为了便于访问,您应该在类级别移动它(与秒表相同)
然而,我注意到有些局部变量可能是实例属性。让updateTime成为类方法。
如果它在纯Swift类中,则需要在该方法的声明前面加上@objc,如:
class A {
@objc func updateTime(timer:NSTimer) {
}
}
另一种可能性:确保选择器函数不会抛出,因为这也会导致无法识别的选择器异常:
func mySelector(timer: NSTimer) throws {
}
至少从Swift 1.2开始,@objc标志似乎不需要。但是,我遇到了相同的错误,因为我的选择器签名是错误的。需要对其进行设置才能接收NSTimer。e、 g.
func mySelector(计时器:NSTimer)