致命错误:意外地发现零,而解包一个可选值

我想运行这个代码,但我一直得到这个错误:

致命错误:意外地发现零,而解包一个可选值

我不明白这是什么意思,为什么我得到它。 任何提示?

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") } } 

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

如果行operaterLabel.text == ""抛出exception,那么你的operaterLabel是零。 确认您已成功将其连接到Interface Builder文件中的标签。

在我的情况下,我试图访问我创build的函数中的标签,这是在一组variables之后使用的。

 var something: String { didSet { updateUI() } } func updateUI() { label.text = "Hello" } 

我解决了它:

 var something: String override func viewDidLoad() { label.text = "hello" } 

我的理论是,我的functionupdateUI是在创build视图和标签之前访问的。

检查你的网点,我有这个之前,标签和button可以变得不连接(如果你已经调整了约束等)

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

我有完全相同的错误,花了很多时间debugging它。 @jmduke说的真的是关键:错误发生在哪里?

有了我特别的错误,看着operaterLabel.text == ""引导我走上了正确的道路。 当视图还没有完全初始化时,我访问了operaterLabel.text 。 在我个人的情况下,我在一个segue期间从一个不同的视图中设置了一个variables,然后对这个variables进行了设置,并更新了视图中的一个标签。 但是这个观点并没有完全初始化。

因此我的解决scheme是更新viewDidLoad()函数内的标签。

这意味着您的故事板没有链接到您的IBOUTLET,请validation

如果你确定你的单元的xib没有问题,

然后我发生这个问题,我的错误是注册cell方法:

1)

 self.tableView.register(TerantInfoTabCell.self, forCellReuseIdentifier: "TerantInfoTabCell") 

2)

 self.tableView.register(UINib(nibName:"TerantInfoTabCell", bundle: nil), forCellReuseIdentifier: "TerantInfoTabCell") 

我用第一种方法,会出现这个问题,然后我用2)方法replace1),所以这里没有问题。

有些时候,你已经启动视图控制器的问题之前呈现这样的:

 let myViewController = MyViewController() 

用…代替

 let myViewController = self.storyboard?.instantiateViewController(withIdentifier: "storyboardID") as! MyViewController 

我有这个错误,我的问题是由于我的模型类添加一个成员(让我们称之为newProperty),然后尝试运行一个项目加载与NSCoder.decodeObjectForKey(newPropertyKey)的数据。 在之前的testing中,我保存了没有newProperty的对象,所以当应用程序试图调用旧数据的decodeObjectForKey(newPropertyKey)时,Xcode响应此错误消息。

通常会发生此错误,因为我们试图在加载视图后更改UILabel文本。 请记住,在视图中加载的UILabels不能以任何方式更改,只能在viewdidload()函数中设置。 你可以通过将你的文本分配代码放在viewDidLoad()函数中来检查,这个函数在加载视图的时候会设置UILabels,它将起作用。 但是现在,如果您的应用程序的构build方式是在加载视图后设置UILabels,那么唯一的解决scheme是您将需要dynamic创buildUILabels /以编程方式在代码中随时随地创buildUELabels,并分配您想要的内容他们将被创build/实例化与文本/标签。