我试图在场景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这会引发一个错误,即:在展开可选值时意外地发现为零。它指的是
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
}
}为什么?
发布于 2015-04-03 10:38:44
您在prepareForSegue期间获得的目标控制器:当时还没有加载它的视图。这也意味着它的子视图渠道还没有连接起来。
你能确定的最早有网点的是viewDidLoad。
https://stackoverflow.com/questions/29428977
复制相似问题