按下按钮并获取其currentTitle后,Swift返回致命错误

时间:2016-02-20 05:41:23

标签: ios xcode swift

所以,我正在iTunes上关注iOS 8的Switf视频课程(https://itunes.com/StanfordSwift如果有人有兴趣,免费),好吧,现在当然iOS 9可用,我想我遇到了问题对于不同的版本,我在网上找不到任何关于此的内容。我希望任何阅读此内容的人都可以帮助我。

该项目是关于计算器的,所以我在UI中有带数字的按钮,这些按钮将其值(currentTitle)发送到我的appendDigit函数。 Xcode没有标记任何错误,但是在运行时我按下按钮时会出现致命错误,老实说,我不明白发生了什么。

我尝试设置和IF语句的时候是否有可用的currentTitle,但是,这根本没有帮助,因为我需要获取按钮编号。

以下是代码:

@IBAction func appendDigit(sender: UIButton) {

    let digit = sender.currentTitle!

    if userIsInTheMiddleOfTypingANumber {
        display.text = display.text! + digit
    }else{
        display.text = digit
        userIsInTheMiddleOfTypingANumber = true
    }

}

导致错误的行是:let digit = sender.currentTitle!

这里也是我得到的截图,似乎按钮正在发送值为空...但正如你所看到的,有数字!

enter image description here

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您声明,按钮上有数字。但我认为其中一些或其中一个不会。

崩溃是由展开Optional值引起的,该值是以下行:

let digit = sender.currentTitle!

通过在故事板中查看您的布局,我认为您将许多按钮连接到相同的IBAction方法,这非常好。

但如上所述,其中一些或其中一个,currentTitle未以编程方式或故事板(“标题”)设置,因此崩溃。

因此,请仔细检查其中一位或其中一位currentTitle尚未设置的人。

我能够通过故意在其中一个按钮中省略currentTitle来重新产生错误。崩溃的发生与您遇到的崩溃完全相同:

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

或者,可以以更安全的方式进行:

@IBAction func appendDigit(sender: UIButton)
{
    if let digit = sender.currentTitle
    {
        if userIsInTheMiddleOfTypingANumber
        {
            display.text = display.text! + digit
        }
        else
        {
            display.text = digit
            userIsInTheMiddleOfTypingANumber = true
        }
    }
}