2017-01-21 14 views
1

オプションの値をアンラップしながら、予想外にnilを見つけ、私は致命的なエラーが発生しました:私のアプリを実行するときにオプションの値をアンラップしながら、予想外にあるため、それはこれが起こっている次のコード This is what debugging shows @IBInspectable致命的なエラー:

+0

what/whereはあなたの 'lineHeightConstraint'ですか? – holex

答えて

1

でハングnilを見つけInspectableがhasBottomLineプロパティを設定しているため、didSetプロパティオブザーバをと呼び、メインビューをロードする前にと呼びます。

:たとえば、あなたがそれを使用する前に、オプションをアンラップする必要があります

@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint! 

:私はあなたのlineHeightConstraintは、おそらくのように、オプションで暗黙的に開封されたものとして定義されていることを推測するつもりだ

lineHeightConstraint?.constant = hasBottomLine ? 3 : 0 

ビューがロードされた後でもこの制約を設定する必要がある可能性がありますので、オプションにnilが含まれているかどうかを確認してフラグが設定されているかどうかを確認してから、viewDidLoadメソッド。このコードは、サブクラス化のUIViewのUIViewControllerではなくであることを、余分な情報と、


更新の回答(または多分あなたは自分のviewDidLoadにかかわらず、それを呼び出すことができます)。

viewDidLoadメソッドで制約定数を更新するのではなく、UIViewのlayoutSubviewsメソッドで制約定数を更新することができます。例:

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

エラーが削除されましたが、ビューはまだ読み込まれません。 –

+0

「ビューはまだロードされていません」という意味はどうですか?あなたのviewDidLoadメソッドは呼び出されていませんか?または、設定しようとしている制約が設定されていませんか?制約が設定されていない場合は、viewDidLoadメソッドでも制約を設定することができます。 –

+0

このコードは他のビューの一部であるHeaderViewのコードです。このヘッダーにリンクされたビューはロードされません。だからアプリはその時点でハングアップしています。 –