@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的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil