致命错误:在展开Optional值时意外发现nil

Ars*_*hia 17 ios swift

我试图运行此代码但我继​​续收到此错误:

致命错误:在展开Optional值时意外发现nil

我不明白这意味着什么或为什么我得到它.任何提示?

import UIKit

class ViewController: UIViewController {

var lastNumber: String = ""
@IBOutlet var answerField: UILabel
@IBOutlet var operaterLabel: UILabel

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 buttonTapped(theButton: UIButton) {
    if answerField.text == "0"
    {
        answerField.text = theButton.titleLabel.text
    }
    else
    {
        answerField.text = answerField.text + theButton.titleLabel.text
    }
}

@IBAction func plusTapped(theButton: UIButton) {
    // error is talking about the next line
    if operaterLabel.text == ""
    {
        operaterLabel.text = "+"
        lastNumber = answerField.text
        answerField.text = "0"
    }
    else
    {
        enterTapped(nil)
        operaterLabel.text = "+"
    }

}

@IBAction func minusTapped(theButton: UIButton) {
    if operaterLabel.text == ""
    {
        operaterLabel.text = "-"
        lastNumber = answerField.text
        answerField.text = "0"
    }
    else
    {
        enterTapped(nil)
        operaterLabel.text = "-"
    }

}

@IBAction func clearTapped(AnyObject) {
    answerField.text = "0"
    operaterLabel.text = ""
    lastNumber = ""

}

@IBAction func enterTapped(AnyObject?) {

    var num1 = lastNumber.toInt()
    var num2 = answerField.text.toInt()
    if !num1 || !num2
    {
        showError()
        return
    }
    var answer = 0
    if operaterLabel.text == "-"
    {
        var answer = num1! - num2!
    }
    else if operaterLabel.text == "+"
    {
        var answer = num1! + num2!
    }
    else
    {
        showError()
        return
    }
    answerField.text = "\(answer)"

}

func showError()
{
    println("Ther was an error")
}
}
Run Code Online (Sandbox Code Playgroud)

jmd*_*uke 16

错误是指当可选值设置为nil时您正在访问可选值的参数(例如,访问answerField.text时间answerField为nil),可能是您的两个中的一个UILabels.

如果该行operaterLabel.text == ""抛出异常,那么你operaterLabel就是零.验证是否已将其成功连接到Interface Builder文件中的标签.


Ahm*_*eeb 7

有时,您在呈现视图控制器之前启动视图控制器的问题如下:

let myViewController  = MyViewController()
Run Code Online (Sandbox Code Playgroud)

将其替换为

let  myViewController = self.storyboard?.instantiateViewController(withIdentifier: "storyboardID") as! MyViewController
Run Code Online (Sandbox Code Playgroud)


Nat*_*iaz 6

在我的例子中,我试图访问我创建的函数中的标签,该函数在变量集之后使用.

var something: String {
    didSet {
        updateUI()
    }
}

func updateUI() {
    label.text = "Hello"
}
Run Code Online (Sandbox Code Playgroud)

我通过以下方式解决了

var something: String

override func viewDidLoad() {
    label.text = "hello"
}
Run Code Online (Sandbox Code Playgroud)

我的理论是在创建视图和标签之前访问了我的函数updateUI.


Ric*_*cha 5

检查你的插座,我已经有了这个标签和按钮可以刚刚连接(如果你已经调整了约束等)

简单的重新连接有时可以解决问题