@IBInspectable 致命错误:在展开可选值时意外发现 nil

Posted

技术标签:

【中文标题】@IBInspectable 致命错误:在展开可选值时意外发现 nil【英文标题】:@IBInspectable fatal error: unexpectedly found nil while unwrapping an Optional value 【发布时间】:2017-01-21 15:16:10 【问题描述】:

我收到致命错误:在运行我的应用程序时解包可选值时意外发现 nil,它挂起以下代码

【问题讨论】:

你的lineHeightConstraint是什么/在哪里? 【参考方案1】:

发生这种情况是因为 Inspectable 正在触发要设置您的 hasBottomLine 属性,因此在加载主视图之前 调用 didSet 属性观察器。

我猜你的 lineHeightConstraint 可能被定义为一个隐式展开的可选项,例如:

@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint!

你必须在使用它之前打开可选的,例如:

lineHeightConstraint?.constant = hasBottomLine ? 3 : 0

在加载视图后,您可能仍需要设置此约束,因此您可能需要检查可选项是否包含 nil,如果是,请设置一个标志,并稍后在您的 viewDidLoad 中执行此行方法。 (或者也许你可以在你的 viewDidLoad 中调用它)


更新的答案,额外的信息表明此代码位于子类 UIView 而不是 UIViewController 中。

您可以在 UIView 的 layoutSubviews 方法中更新您的 viewDidLoad 方法中的约束常量,而不是更新。例如:

override func layoutSubviews() 
    super.layoutSubviews()
    lineHeightConstraint?.constant = hasBottomLine ? 3 : 0

【讨论】:

消除了错误,但视图仍未加载。 “视图仍未加载”是什么意思。 - 你的 viewDidLoad 方法没有被调用?或者你试图设置的约束没有被设置?如果没有设置约束,您还需要在 viewDidLoad 方法中设置它。 此代码来自 HeaderView,它是其他一些视图的一部分。链接到此标题的视图未加载。所以应用程序就在此时挂起。 嗯,好的,代码在子类 UIView 中,而不是子类 UIViewController- 这是相关信息。请参阅我的答案以获取更新。

以上是关于@IBInspectable 致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:在展开可选值时意外发现 nil - 为啥?

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?

SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil

JSON 致命错误:在展开可选值 (llbd) 时意外发现 nil

致命错误:在展开可选值 (lldb) 时意外发现 nil

CollectionView 致命错误:在展开可选值时意外发现 nil