2

我遇到了致命错误:在运行我的应用程序时解包 Optional 值时意外发现 nil 它挂起以下代码 这是调试显示的

4

1 回答 1

5

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

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

@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint!

在使用它之前,您必须解开可选项,例如:

lineHeightConstraint?.constant = hasBottomLine ? 3 : 0

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


更新了答案,并提供了额外信息,即此代码位于子类 UIView 而不是 UIViewController 中。

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

override func layoutSubviews() {
    super.layoutSubviews()
    lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
}
于 2017-01-21T16:10:49.843 回答