IBOutlet中是nil
问题描述:
我已创建为将基于先前屏幕上选择的按钮保持不同的信息的图标准插座。IBOutlet中是nil
@IBOutlet weak var labelView: UIView!
这表明它是连接两个故事板视图和代码本身,但是,每次我去任何参考LABELVIEW如:
if detail.description == "About"
{
labelView.backgroundColor = UIColor.red
}
然后应用程序崩溃出有:
fatal error: unexpectedly found nil while unwrapping an Optional value
我已经试过所有我能想到的或在互联网上写着:
移除和替换的连接
删除像一个支柱所得到的数据文件夹建议
创建一个参考self.view迫使它加载
它移到
viewDidAppear
将其移动到
viewWillAppear
它移动到
viewDidLoad
(这是它目前正在
称呼)
我相信在这一点上,答案是很简单的,我只是完全失踪了。
答
要看到出口被设置为无,试试这个:
@IBOutlet weak var labelView: UIView? {
didSet {
print("labelView: \(labelView)")
}
}
你应该看到的视图加载时将其设置为初始值。如果再被设置为nil
,穿上print
断点,你应该能够从那里发生的事情回溯看。
+1
并称,并通过回溯追踪检查(再次)我终于找到了简单的和愚蠢的错误。我修改了一个以前的项目,并且错过了在视图加载之前引用了来自segue的视图的函数调用,因此为零。我现在感觉非常愚蠢。 – Danickar
答
视图是懒惰的初始化。如果你调用的代码viewDidLoad()
的意见生命周期之前,受影响的线路,尝试访问view
提前:
if detail.description == "About" {
_ = self.view
labelView.backgroundColor = UIColor.red
}
能否请你告诉回溯所以我们可以得到发生了什么更好的主意吗?究竟是哪条线坠毁? –
对不起,如果我问你一个简单的问题:你确定你在该行的崩溃?你有没有尝试设置一个断点并逐步进行,看它是否真的是崩溃线? –
您是否在某个时候从其超级视图中删除了视图? – Sulthan