TL; DR: у меня есть IBOutlet
(UILabel
), который правильно подключен в раскадровке. При доступе (распаковке) он отлично работает в viewDidLoad()
... но через несколько секунд его значение равно нулю. Точка наблюдения говорит, что розетка меняется сразу после вызова на viewDidLayoutSubviews()
, , но ... a print()
вызов в конце viewDidLayoutSubviews()
показывает, что он не ноль.
Это очень похоже на IBOutlet равен nil , но его решение (значение дорожки с didSet()
) не сработало. (Есть много связанных сообщений, но у всех были тривиальные решения.)
Что я сделал:
- Переподключен выход к этикетке - с обеих сторон
- Удалил ярлык и снова подключил его
- Очистили проект
- Удалил DerivedData
- Выйти и перезапустить Xcode
- Выйдите и перезапустите мой Mac
- Добавлен метод
didSet()
в розетку.
- Он срабатывает во время
viewDidLoad()
и показывает ненулевое значение.
- В
viewDidLoad()
я установил текстовое значение без проблем
- Он запускает , а не до сбоя с нулевым развёртыванием
- Добавлена точка наблюдения к переменной.
- Этот вызывает срабатывание до сбоя (сразу после
viewDidLayoutSubviews()
и показывает следующее:
![screenshot of Xcode debugger](https://i.stack.imgur.com/Nphl4.jpg)
Как упоминалось ранее, при выходе из самого последнего вызова метода перед точкой наблюдения (viewDidLayoutSubviews()
) выход не равен нулю.
Эти сбои, кажется, всегда включают в себя подпредставления определенного суперпредставления. Я добавил точку наблюдения в розетку суперпредставления, но она никогда не срабатывает.
Что могло бы побудить мой код отпустить эту слабую ссылку?