在场景之间传递数据

时间:2015-04-03 08:43:31

标签: ios8 scene

我正在尝试从场景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

这会抛出一个错误:在展开Optional值时意外发现nil。它指向

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

怎么可能?我以为我将scene2Label的文本值设置为“从场景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
    }
}

为什么?

1 个答案:

答案 0 :(得分:0)

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

最早可以确定有出口的是viewDidLoad。