2017-01-21 1 views
1

я получил фатальную ошибку: неожиданно нашел ноль в то время как разворачивание необязательного значения при запуске моего приложения он висит на следующий код This is what debugging shows @IBInspectable фатальную ошибка: неожиданно нашел ноль в то время как разворачивание необязательного значения

+0

что/где ваш 'lineHeightConstraint'? – holex

ответ

1

Это происходит потому, что Inspectable запускает ваше свойство hasBottomLine, которое должно быть установлено, и поэтому наблюдатель свойства будет называться до загружен ваш основной вид.

Я собираюсь предположить, что ваш lineHeightConstraint, вероятно, определяется как неявно развернутом необязательными, что-то вроде:

@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint! 

Вы должны будете разворачивать опциональный перед использованием, например:

lineHeightConstraint?.constant = hasBottomLine ? 3 : 0 

Возможно, вам по-прежнему необходимо установить это ограничение после загрузки представления, поэтому вы можете проверить, содержит ли опциональный параметр nil, если установлен флаг, и выполнить эту строку позже в методе viewDidLoad , (Или, возможно, вы можете просто назвать его независимо в вашем viewDidLoad)


Обновленный ответ, с дополнительной информацией, что этот код находится в наследнике UIView, а не UIViewController.

Вместо того, чтобы обновлять константу ограничения в вашем методе viewDidLoad, вы могли бы сделать это в методеUIView. Например:

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

Это удалило ошибку, но представление все еще не загружено. –

+0

Что вы подразумеваете под «пока еще не загруженным». - ваш метод viewDidLoad не вызывается? Или ограничение, которое вы пытаетесь установить, не установлено? Если ограничение не установлено, вы также захотите установить его в методе viewDidLoad. –

+0

Этот код из HeaderView, который является частью некоторых других представлений. Представления, связанные с этим заголовком, не загружаются. Таким образом, приложение просто зависает в этот момент. –

Смежные вопросы

 Смежные вопросы