【问题标题】:Custom view - Crash in "required init?(coder aDecoder: NSCoder)" method自定义视图 - “required init?(coder aDecoder: NSCoder)”方法中的崩溃
【发布时间】:2017-11-12 08:16:25
【问题描述】:

代码:

class HeaderView: UIView {

@IBOutlet weak var titleLabel: UILabel!

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    finishInit()
}

func finishInit() {
    titleLabel.backgroundColor = UIColor.white
}

func setView(withTitle title: String?) {
    titleLabel.backgroundColor  = UIColor.white
    titleLabel.text = title

}

崩溃:

在finishInit()方法上,同时设置标签背景色

fatal error: unexpectedly found nil while unwrapping an Optional value

但同样,在 setView() 方法上,不会崩溃。

【问题讨论】:

  • 在您的 xib 或情节提要中检查您的 Outlet 连接
  • Outlet 适用于 setView() 方法
  • 你的setView方法被调用了?我认为你的 finishInit() 被首先调用并在此之前崩溃
  • 我尝试从另一个视图调用 setView 方法,在该视图上添加了“HeaderView”作为子视图。我评论了 finishInit 以进行测试。

标签: ios swift init


【解决方案1】:

init 方法运行并返回时,还没有建立出口的连接。因此,网点仍然是nil,而你在使用它时会崩溃。

您应该能够通过在titleLabel 之后添加一个问号 (?) 来测试它,从而再次将其视为可选项。

titleLabel?.backgroundColor = UIColor.white

那么你不会崩溃,但如果标签仍然是 nil,那行当然也不会做任何事情。

所以您需要稍后调用使用插座的代码(您似乎正在使用setView

您可以使用awakeFromNib 来设置插座。

【讨论】:

  • 是的,awakeFromNib 工作得非常好。我只是想知道崩溃的确切原因。像“self.backgoundColor = UIColor,white”这样的东西不会崩溃,只有在设置子视图属性崩溃时才会发生。你的答案是对的,谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多