致命错误:意外地发现零,而解包一个可选值
我想运行这个代码,但我一直得到这个错误:
致命错误:意外地发现零,而解包一个可选值
我不明白这是什么意思,为什么我得到它。 任何提示?
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/实例化与文本/标签。
- 什么是Swift中使用的“自我”?
- 为什么我的代码在我的string中找不到数字?
- Swift'无法build立Obj-C模块'BranchInvite'
- prepareForSegue没有从自定义的uitableviewcell调用
- 为什么我需要在Swift中为struct编写初始化程序,以便在unit testing中使用它?
- 如何在ReactiveCocoa 4中创build自定义信号?
- 尝试从应用程序发送电子邮件,并不起作用 – 斯威夫特(iOS)
- 当NSOperationQueue中的所有其他操作完成时,执行NSOperation,无论它们是否成功完成
- 如何解决Cocoa touch框架中的符号名称冲突