Ios 错误-线程1:信号SIGABRT(无法识别的选择器发送到实例)

Ios 错误-线程1:信号SIGABRT(无法识别的选择器发送到实例),ios,xcode,swift,nstimer,Ios,Xcode,Swift,Nstimer,我正在制作一个应用程序,在这个应用程序中,你需要指出标签出现的时间长度,并在页面底部倒计时 当我在Xcode模拟器上运行我的应用程序时,Chronometer标签显示“可选(*指示数字)”,而我希望它只显示指示数字。一旦它显示了一秒钟,我就会被带到我的应用程序代理那里,它说线程1:SIGABRT 还显示了以下错误:2015-02-22 21:05:50.860 MemoPres.New[71008:12980314]-[MemoPres_New.ViewController subtractTi

我正在制作一个应用程序,在这个应用程序中,你需要指出标签出现的时间长度,并在页面底部倒计时

当我在Xcode模拟器上运行我的应用程序时,
Chronometer
标签显示“可选(*指示数字)”,而我希望它只显示指示数字。一旦它显示了一秒钟,我就会被带到我的应用程序代理那里,它说
线程1:SIGABRT

还显示了以下错误:
2015-02-22 21:05:50.860 MemoPres.New[71008:12980314]-[MemoPres_New.ViewController subtractTime:]:未识别的选择器发送到实例0x7fbab24299c0
2015-02-22 21:05:50.862 MemoPres.New[71008:12980314]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[MemoPres_New.ViewController subtractTime::]:未识别的选择器发送到实例0x7fbab24299c0'

非常感谢您的帮助

以下是我的全部代码:

class ViewController: UIViewController {


@IBOutlet weak var chronometre: UILabel!
@IBOutlet weak var prochainpointLabel: UILabel!
@IBOutlet weak var pointactuelLabel: UILabel!
@IBOutlet weak var point1Textfield: UITextField!
@IBOutlet weak var point1tempsTextfield: UITextField!
@IBOutlet weak var point2Textfield: UITextField!
@IBOutlet weak var point2tempsTextfield: UITextField!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func presenterButton(sender: AnyObject) {

    var timer = NSTimer()
    var seconds = point1tempsTextfield.text.toInt()

    pointactuelLabel.text = point1Textfield.text
    prochainpointLabel.text = point2Textfield.text
    chronometre.text = "\(seconds)"



        timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: ("subtractTime:"), userInfo: nil, repeats: true)



    func subtractTime(dt:NSTimer){
        seconds!--
        chronometre.text = "\(seconds)"

    }


        }
}

您需要在iAction之外声明方法subtractTime()。这同样适用于计时器和第二个变量

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var progressView: UIProgressView!
    @IBOutlet weak var strTimer: UILabel!
    @IBOutlet weak var btnStartCancel: UIButton!
    @IBOutlet weak var btnPauseResume: UIButton!







我将函数和计时器变量直接移动到
presenterButton
函数上方。但是现在它说
func presenterButton
不能是iAction,因为只有实例方法可以声明为“iAction”。此外,无论在
subtractTime
函数中提到
秒数
,它都表示
使用未解析标识符“秒数”
。你知道如何解决这些问题吗?我不会创建计时器来计算时间。你想让我给你看一段显示如何创建计时器的代码吗?我可以,但我不会尝试修复已经以错误方式启动的东西。是的,那太好了@达布斯
    var timer = Timer()
    var startTime: TimeInterval = 0
    var timeLeft: TimeInterval = 45
    var isTimerON = false
    var isPaused = false
    func updateTimer() {
        if isTimerON && !isPaused {
            strTimer.text = (startTime - Date().timeIntervalSinceReferenceDate).time
            progressView.progress = (1 - Float(startTime - Date().timeIntervalSinceReferenceDate) / 45)
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        timer = .scheduledTimerWithTimeInterval(1/20, target: self, selector: "updateTimer", userInfo: nil, repeats: true)
        RunLoop.main.addTimer(timer, forMode: .common)
    }
    @IBAction func pauseResumeAction(_ sender: Any) {
        isPaused = !isPaused
        if isPaused {
            timeLeft = startTime - Date().timeIntervalSinceReferenceDate
        }
        startTime = Date().dateByAddingTimeInterval(timeLeft).timeIntervalSinceReferenceDate
        btnPauseResume.setTitle( !isPaused ? "Pause" : "Resume", forState: .normal)
    }
    @IBAction func startCancelAction(_ sender: Any) {
        isTimerON = !isTimerON
        isPaused = false
        timeLeft = 45

        startTime = isTimerON ? Date().dateByAddingTimeInterval(timeLeft).timeIntervalSinceReferenceDate : timeLeft
        btnStartCancel.setTitle(!isTimerON ? "Start" : "Cancel",  forState: .normal)
        progressView.progress = 0
        btnPauseResume.setTitle("Pause",  forState: .normal)
        strTimer.text = "00:45"
        btnPauseResume.enabled = isTimerON
    }
}
extension TimeInterval {
    var time: String {
        String(format: "%02d:%02d", Int((self/60)%60), Int(self%60))
    }
}