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

Vel*_*ity 9 tableview iboutlet ios segue swift

DetailViewController:

    @IBOutlet var selectedBundesland: UILabel!
Run Code Online (Sandbox Code Playgroud)

TableViewController:

    override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {


    if (segue.identifier == "BackToCalculator") {
        var vc:FirstViewController = segue.destinationViewController as FirstViewController
            vc.selectedBundesland.text = "Test"
    }
Run Code Online (Sandbox Code Playgroud)

IBOutlet已连接!

错误:致命错误:在解包可选值时意外发现nil

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

您是否需要有关我的项目的更多信息?

Pau*_*w11 30

您无法直接写入UILabelin,prepareForSegue因为视图控制器尚未完全初始化.您需要创建另一个字符串属性来保存该值并将其放入相应函数的标签中 - 例如viewWillAppear.


小智 12

DetailViewController:

var textValue: String = ""
@IBOutlet weak var selectedBundesland: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    selectedBundesland.text = textValue
}
Run Code Online (Sandbox Code Playgroud)

TableViewController:

     if (segue.identifier == "BackToCalculator") {  
         var vc:FirstViewController = segue.destinationViewController as FirstViewController
         vc.textValue = "Test"
}
Run Code Online (Sandbox Code Playgroud)

  • 当通过vc.textValue ="Test"执行此操作时,我收到"致命错误:在展开可选值时意外发现nil".任何的想法? (3认同)

Jos*_*osh 5

最近有这个问题。问题是我已将序列从当前视图控制器的特定对象拖到目标视图控制器-如果要传递值,请不要这样做。

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

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