Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift @IBInspectable致命错误:在展开可选值时意外发现nil_Swift_Xcode8_Ibinspectable - Fatal编程技术网

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

Swift @IBInspectable致命错误:在展开可选值时意外发现nil,swift,xcode8,ibinspectable,Swift,Xcode8,Ibinspectable,我遇到了致命错误:在运行我的应用程序时,在展开可选值时意外发现nil,它挂起以下代码 之所以发生这种情况,是因为Inspectable正在触发要设置的HasBottonline属性,因此在加载主视图之前调用didSet属性观察器 我猜您的lineHeightConstraint可能被定义为隐式展开的可选项,类似于: @IBOutlet weak var lineHeightConstraint: NSLayoutConstraint! 在使用之前,您必须先打开可选文件,例如: lineHeig

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

之所以发生这种情况,是因为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中-这是相关信息。请参阅我的答案以获取更新。您的
线宽约束是什么/在哪里?