在场景之间传递数据

Passing data between scenes

我正在尝试从场景 1 设置场景 2 中的标签文本。我编写了以下代码。

// original viewController (scene 1)
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
         let destination = segue.destinationViewController as Scene2ViewController
            destination.scene2Label.text = "Arrived from scene 1"
        } //scene2Label is a Label in Scene2ViewController

这会抛出一条错误消息:在展开可选值时意外发现 nil。它指向

destination.scene2Label.text = "Arrived from scene 1"

这怎么可能?我以为我将 scene2Label 的文本值设置为 "Arrived from scene 1"。

另一方面,这段代码工作得很好:

class ViewController: UIViewController {
    @IBOutlet weak var scene1Label: UILabel!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let destination = segue.destinationViewController as Scene2ViewController
        destination.labelText = "Arrived from scene 1"
    }
}

class Scene2ViewController: UIViewController {
    @IBOutlet weak var scene2Label: UILabel!
    var labelText : String?

    override func viewDidLoad() {
        super.viewDidLoad()
        scene2Label.text = labelText
    }
}

为什么?

您在 prepareForSegue: 期间获得的目标控制器当时尚未加载其视图。这也意味着 none 它的子视图出口已经连接。

最早可以确定有outlets的是viewDidLoad