在 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
中的IBOutlet
s,因为它们尚未连接。
如cmets中所述,在DetailViewController
中创建String
属性,将其设置在prepareForSegue
中,并在viewDidLoad
或DetailViewController
的viewWillAppear
中设置标签的text
属性。
【讨论】:
【参考方案2】:另一种方法是在设置属性之前调用detailVC.loadViewIfNeeded()
。它会加载你所有的IBOutlet
's
【讨论】:
以上是关于在 prepareForSegue 中意外发现 nil IBOutlet的主要内容,如果未能解决你的问题,请参考以下文章
应急响应--记录一次漏洞紧急处理中意外发现的挖矿木马(Shiro反序列化漏洞和ddg挖矿木马)
数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库