在 prepareForSegue 中意外发现 nil IBOutlet

Posted

技术标签:

【中文标题】在 prepareForSegue 中意外发现 nil IBOutlet【英文标题】:Unexpectedly found nil IBOutlet in prepareForSegue 【发布时间】:2016-07-13 16:26:06 【问题描述】:

我有一个详细视图控制器,我想将标签文本设置为使用 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!

【问题讨论】:

您是否尝试过将属性添加到目标视图控制器并为其分配文本的值,然后仅将标签分配给 viewDidLoad 或 viewWIllAppear 中的文本? 你在哪里得到了意外发现的 nil 错误? @AlessandroOrrù 在控制台中 @MikeSchmidt,请参阅下面的 vadian 的回答 【参考方案1】:

您无法访问prepareForSegue 中的DetailViewController 中的IBOutlets,因为它们尚未连接。

如cmets中所述,在DetailViewController中创建String属性,将其设置在prepareForSegue中,并在viewDidLoadDetailViewControllerviewWillAppear中设置标签的text属性。

【讨论】:

【参考方案2】:

另一种方法是在设置属性之前调用detailVC.loadViewIfNeeded()。它会加载你所有的IBOutlet's

【讨论】:

以上是关于在 prepareForSegue 中意外发现 nil IBOutlet的主要内容,如果未能解决你的问题,请参考以下文章

应急响应--记录一次漏洞紧急处理中意外发现的挖矿木马(Shiro反序列化漏洞和ddg挖矿木马)

数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库

MQTT连接在iOS中意外关闭的可能原因是啥?

在android eclipse中意外停止

PHP MySQL - 为啥存储过程调用在 PHP 代码中意外结束

SMTP 服务器在 mailkit 中意外断开连接