展开可选 IBOutlet 值时为零

Nil while unwrapping an Optional IBOutlet value

我有 fatal error: unexpectedly found nil while unwrapping an Optional value IBOutlet

在我的自定义视图中,我已将我的出口与 XIB 文件相关联。我已经仔细检查过这个。这是它的样子:

@IBOutlet weak var label: UILabel! {
    didSet {
        label.textColor = .redColor()
    }
}

我对 layoutSubviews 的实现如下所示:

override func layoutSubviews() {
    super.layoutSubviews()

    label.preferredMaxLayoutWidth = label.frame.size.width
}

尽管 layoutSubviews 方法必须在 UI 元素初始化后调用,但我收到错误消息:

fatal error: unexpectedly found nil while unwrapping an Optional value

此错误由行触发:

label.preferredMaxLayoutWidth = label.frame.size.width

为什么会这样?如何解决?

尝试在 viewDidLayoutSubviews 而不是 layoutSubviews 中进行。 UI 元素应该在 viewDidLayoutSubviews 中准备就绪,但在 layoutSubviews 中不需要。

您可以通过使用 if let 语句安全地展开标签来防止崩溃的发生。

if let mylabel = label {
   mylabel.preferredMaxLayoutWidth = mylabel.frame.size.width
}

你应该使用:

label?.preferredMaxLayoutWidth = label.frame.size.width

这之前在 layoutSubviews 的早期调用中无法设置出口,但在下一次调用中将会设置。使用可选链接可以避免显式可选解包。如果标签为零,则自动跳过分配。