2017-01-23 3 views
2

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

@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 (который является, где она в настоящее время
    названием)

Я уверен, что в этот момент, что ответ довольно прост, и я просто совершенно не хватает его.

+0

Можете ли вы показать трассировку, чтобы мы могли получить лучшее представление о том, что происходит? Точно, в какую строку он врезался? –

+1

Прошу прощения, если я задам вам простой вопрос: уверены ли вы, что в этой строке произошел сбой? Вы пытаетесь поставить точку останова и продолжать шаг за шагом, чтобы увидеть, действительно ли это столкновение? –

+0

Вы в какой-то момент удаляете представление из своего супервизора? – Sulthan

ответ

1

Чтобы увидеть, где выход создается на ноль, попробуйте следующее:

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

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

+1

Добавляя это и проверяя обратную трассировку (снова), я, наконец, нашел простую и тупую ошибку. Я модифицировал предыдущий проект и пропустил вызов функции, которая ссылалась на представление из segue до того, как изображение загрузилось, поэтому nil. Сейчас я чувствую себя очень глупо. – Danickar

0

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

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