ios - 展开可选 IBOutlet 值时为 Nil

标签 ios objective-c swift uitableview iboutlet

我遇到了 fatal error :在解包 IBOutlet 的可选值时意外发现 nil。

在我的自定义 View 中,我已将我的 socket 与 XIB 文件关联起来。我已经仔细检查过这一点。它是这样的:

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

我的 layoutSubviews 实现如下所示:

override func layoutSubviews() {
    super.layoutSubviews()

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

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

fatal error: unexpectedly found nil while unwrapping an Optional value

此错误由以下行触发:

label.preferredMaxLayoutWidth = label.frame.size.width

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

最佳答案

您应该使用:

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

在layoutSubviews的早期调用之前, socket 尚未设置,但在下一次调用中将会设置。使用可选链接,您可以避免显式可选展开。如果 label 为零,则自动跳过分配。

关于ios - 展开可选 IBOutlet 值时为 Nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397279/

相关文章:

objective-c - 标签不是从左上角开始

ios - WatchKit:捆绑标识符和 WKAppBundleIdentifer 之间有什么区别?为什么它会导致应用程序组无法工作?

ios - Swift 覆盖协议(protocol)扩展保持扩展行为

ios - double iOS 的 NSArray( objective-c )

ios - 计算自上次发布以来的天数?

ios - Swift:从后台重新打开应用程序,willEnterForeground 在 appdelegate 之前运行

ios - 如何询问设备屏幕比例(iphone 或 ipad)?

ios - AdBanner 未在模拟器中显示

ios - NSMutableData 到 NSDictionary 返回 null

ios - 自定义 Collection View 单元格无法正常工作