Swift 3:segue 的目标视图控制器中只有 nil 值

Swift 3: only nil values in destination view controller of segue

当使用 prepare (forSegue) 方法将数据传递到 segue 的目标视图控制器时,目标 VC 的所有成员都是 nil。因此,我的程序在尝试访问这些成员时崩溃了。

我在源视图控制器中的代码:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "Second2DetailEdit"{
        var detailVC = segue.destination as! DrinkDetailViewController
        detailVC.headerLabel.text = "Edit Drink"

    }
    //...
}

VC 本身不是零。仅 VC 的所有成员。我忘了什么吗? 这只发生在我的新 Swift 3 项目中。类似的代码在我的Swift2个项目中都没有问题。 提前致谢。

目标视图控制器的视图尚未创建,这就是所有 IBOutlet 为零的原因。尝试在普通属性(如字符串)和目标的 ViewDidLoad 中发送您需要的信息,更新您的视图。

我建议安全地展开您的 detailVC 而不是强制展开...

if segue.identifier == "Second2DetailEdit" {
    if let detailVC = segue.destination as? DrinkDetailViewController {
        detailVC.headerLabel.text = "Edit Drink" 
    }
}

您可以更轻松地在 destinationVC 上设置属性并将信息传递给这些属性,而不是尝试通过 UILabels...

来完成

解决此问题的最佳方法是在第二个视图控制器中创建一个变量并将文本设置为该变量。

然后在 vc 初始化后,您可以将 headerLabel.text 设置为 viewDidLoad

中的新变量