我正在尝试从场景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
}
}
为什么?
答案 0 :(得分:0)
您在prepareForSegue期间获得的目标控制器:此时尚未加载其视图。这也意味着它的子视图出口都没有连接。
最早可以确定有出口的是viewDidLoad。