(Swift)PrepareForSegue:致命错误:意外地发现零,同时展开一个可选值

DetailViewController:

@IBOutlet var selectedBundesland: UILabel! 

TableViewController:

  override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "BackToCalculator") { var vc:FirstViewController = segue.destinationViewController as FirstViewController vc.selectedBundesland.text = "Test" } 

IBOutlet已连接!

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

我阅读了关于Optionals的多个页面,但是我不知道我的问题的答案。

你需要更多关于我的项目的信息吗?

你不能直接写在prepareForSegueUILabel ,因为视图控制器还没有完全初始化。 您需要创build另一个string属性来保存该值,并将其放入适当函数的标签中,例如viewWillAppear

DetailViewController:

 var textValue: String = "" @IBOutlet weak var selectedBundesland: UILabel! override func viewDidLoad() { super.viewDidLoad() selectedBundesland.text = textValue } 

TableViewController:

  if (segue.identifier == "BackToCalculator") { var vc:FirstViewController = segue.destinationViewController as FirstViewController vc.textValue = "Test" } 

最近有这个问题。 问题是我从当前视图控制器中的特定对象拖动了segue到目标视图控制器 – 如果要传递值,请不要这样做。

而是将其从窗口顶部的黄色块拖动到目标视图控制器。 然后适当地命名segue。

然后使用if (segue.identifier == "BackToCalculator")来分配当前的值。 一切都应该解决!

我只是遇到了同样的问题,我通过定义一个没有连接到新视图控制器中的sockets的string,而不是在prepareForSegue()方法中引用它,在新的VC中,我使标签sockets取viewDidLoad()方法中未连接string的值。

干杯

虽然正确的解决scheme是存储文本,并将其附加到稍后在viewDidLoad或标签中的标签,为了testingbuild议,可以绕过这个问题,通过强制destinationViewController通过调用其view属性,如:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?){ if (segue.identifier == "TestViewController") { var vc:FirstViewController = segue.destination as! TestViewController print(vc.view) vc.testLabel.text = "Hello World!" } } 

用爱来做Swift 3.0