簡體   English   中英

無法識別的選擇器發送到實例NSTimer Swift

[英]Unrecognized selector sent to instance NSTimer Swift

我正在嘗試開發一個包含簡單秒表功能的應用程序。 我正在使用Xcode 6和Swift語言。 這是FirstViewController中的代碼

@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成為一個類方法。
如果它是一個純粹的Swift類,你需要在@objc前面說明該方法的聲明,如:

class A {
     @objc func updateTime(timer:NSTimer) {

     }
}

您已將updateTime定義為Stopwatch的本地函數,因此它不在其范圍之外。 您應該在課程級別(與Stopwatch相同)移動它以便可以訪問。

但是我注意到有一些局部變量應該是實例屬性。

另一種可能性:確保你的選擇器函數沒有throw ,因為這也會給你一個無法識別的選擇器異常:

func mySelector(timer: NSTimer) throws {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM