IBOutlet - ноль

Я создал стандартную розетку для представления, которая будет содержать различную информацию в зависимости от кнопки, выбранной на предыдущем экране.

@IBOutlet weak var labelView: UIView!

Он показывает, что он связан как в виде раскадровки, так и в самом коде, однако каждый раз, когда я получаю любую ссылку на labelView, такую ​​как:

if detail.description == "About"
{
   labelView.backgroundColor = UIColor.red
}

Затем приложение вылетает с:

fatal error: unexpectedly found nil while unwrapping an Optional value

Я перепробовал все, что мог придумать или прочитать в интернете:

  • Удалено и заменено соединение

  • Удалил папку производных данных, как предложил один пост

  • Создана ссылка на self.view для принудительной загрузки

  • Переместил это в viewDidAppear

  • Переместил это в viewWillAppear

  • Переместил это в viewDidLoad (где это в настоящее время
    называется)

На данный момент я уверен, что ответ довольно прост, и я просто упускаю его.

2 ответа

Решение

Чтобы увидеть, где розетка установлена ​​на ноль, попробуйте это:

@IBOutlet weak var labelView: UIView? {
    didSet {
        print("labelView: \(labelView)")
    }
}

Вы должны увидеть начальное значение при загрузке представления. Если это тогда устанавливается в nilпоставить точку останова на print и вы должны быть в состоянии видеть из следа, где это происходит.

Представления ленивые инициализированы. В случае, если вы вызываете уязвимую строку кода раньше viewDidLoad() в жизненном цикле представлений, попробуйте получить доступ viewзаблаговременно:

if detail.description == "About" {
    _ = self.view
    labelView.backgroundColor = UIColor.red
}
Другие вопросы по тегам