出乎意料地在prepareForSegue中找到了nil IBOutlet

时间:2016-07-13 16:26:06

标签: ios swift xcode

我有一个详细视图控制器,我想使用indexPath行将标签文本设置为从数组中获取的值。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "showView"){
        let detailVC: DetailViewController = segue.destinationViewController as! DetailViewController
        let indexPath = self.MainTableView.indexPathForSelectedRow!
        detailVC.label.text = "Test"
        self.MainTableView.deselectRowAtIndexPath(indexPath, animated: true)
        }
}

我不断收到致命错误:在解开可选值时意外地发现了nil。我尝试将detailVC.label.text = "Test"切换为detailVC.label.text = names[indexPath.row],但每次都会遇到相同的错误。

我使用相同的代码行来更改单元格的标签文本,没有错误,但是对于这个标签,在空白视图的中心我似乎无法正确使用它?有什么需要改变的想法?

顺便说一下,详细视图控制器中的标签是@IBOutlet weak var label: UILabel!

2 个答案:

答案 0 :(得分:6)

您无法访问IBOutletDetailViewController的{​​{1}},因为它们尚未连接。

如评论中所述,在prepareForSegue中创建String属性,在DetailViewController中设置该属性,并在prepareForSegue中设置标签的text属性或viewDidLoad的{​​{1}}。

答案 1 :(得分:0)

另一种方法是在设置属性之前调用detailVC.loadViewIfNeeded()。它将加载您所有IBOutlet