(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的多个页面,但是我不知道我的问题的答案。
你需要更多关于我的项目的信息吗?
你不能直接写在prepareForSegue
的UILabel
,因为视图控制器还没有完全初始化。 您需要创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