Swift @IBInspectable致命错误:在展开可选值时意外发现nil
我遇到了致命错误:在运行我的应用程序时,在展开可选值时意外发现nil,它挂起以下代码Swift @IBInspectable致命错误:在展开可选值时意外发现nil,swift,xcode8,ibinspectable,Swift,Xcode8,Ibinspectable,我遇到了致命错误:在运行我的应用程序时,在展开可选值时意外发现nil,它挂起以下代码 之所以发生这种情况,是因为Inspectable正在触发要设置的HasBottonline属性,因此在加载主视图之前调用didSet属性观察器 我猜您的lineHeightConstraint可能被定义为隐式展开的可选项,类似于: @IBOutlet weak var lineHeightConstraint: NSLayoutConstraint! 在使用之前,您必须先打开可选文件,例如: lineHeig
之所以发生这种情况,是因为Inspectable正在触发要设置的
HasBottonline
属性,因此在加载主视图之前调用didSet
属性观察器
我猜您的lineHeightConstraint
可能被定义为隐式展开的可选项,类似于:
@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint!
在使用之前,您必须先打开可选文件,例如:
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
override func layoutSubviews() {
super.layoutSubviews()
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
}
加载视图后,可能仍需要设置此约束,因此您可能希望检查可选项是否包含nil,如果包含nil,请设置一个标志,然后在viewDidLoad
方法中执行这一行。(或者您可以在viewDidLoad中直接调用它)
更新了答案,并提供了额外信息,说明此代码位于子类UIView中,而不是UIViewController中 您可以在UIView的
layoutSubviews
方法中更新约束常量,而不是更新viewDidLoad
方法中的约束常量。例如:
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
override func layoutSubviews() {
super.layoutSubviews()
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
}
这消除了错误,但视图仍未加载。您所说的“视图仍未加载”是什么意思。-未调用viewDidLoad方法?或者您试图设置的约束未被设置?如果未设置约束,您还需要在viewDidLoad方法中设置约束。此代码来自HeaderView,它是其他一些视图的一部分。未加载链接到此标题的视图。所以应用程序就挂起了。啊,好吧,代码在子类UIView中,而不是子类UIViewController中-这是相关信息。请参阅我的答案以获取更新。您的
线宽约束是什么/在哪里?