IBOutlet是零

时间:2017-01-23 17:21:39

标签: swift iboutlet xcode8.2

我为视图创建了一个标准插座,该插座将根据前一个屏幕上选择的按钮保存不同的信息。

@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(这是当前正在的地方) 叫)

我确信在这一点上答案很简单,我完全错过了它。

2 个答案:

答案 0 :(得分:1)

要查看插座设置为零的位置,请尝试以下操作:

@IBOutlet weak var labelView: UIView? {
    didSet {
        print("labelView: \(labelView)")
    }
}

加载视图时,您应该看到它设置为初始值。如果它设置为nil,请在print上设置一个断点,您应该可以从回溯中看到它发生的位置。

答案 1 :(得分:0)

视图是惰性初始化的。如果您在视图生命周期中 viewDidLoad()之前调用受影响的代码,请尝试提前访问view

if detail.description == "About" {
    _ = self.view
    labelView.backgroundColor = UIColor.red
}