TL; DR:我有一个IBOutlet
(UILabel
)已正确连接到情节提要中。访问(解包)它在viewDidLoad()
中工作正常……但是几秒钟后,它的值为nil。一个观察点说,出口在调用viewDidLayoutSubviews()
后立即发生变化,但是... 在print()
末尾的viewDidLayoutSubviews()
调用显示其为非零
这与IBOutlet is nil非常相似,但是他的解决方案(使用didSet()
的跟踪值)无效。 (有很多相关的帖子,但是都有微不足道的解决方案。)
我做了什么:
didSet()
方法。
viewDidLoad()
期间触发,并显示非零值。viewDidLoad()
中,我毫无疑问地设置了其文本值viewDidLayoutSubviews()
之后并显示以下内容:如前所述,在监视点(viewDidLayoutSubviews()
)之前的最新方法调用的退出处,出口不为空。
这些崩溃似乎总是涉及特定超级视图的子视图。我在监视的出口添加了一个监视点,但是它永远不会触发。
可能是什么促使我的代码放弃了这个弱引用?
答案 0 :(得分:0)
TL; DR:我正在掩盖相关观点。
嗯,找到自己答案的最好方法是问别人。感谢@DonMag,我准备了更多的跟踪,断点和屏幕截图。我注意到了这种方法(当然是为了解决另一个错误而添加的):
当然,变为nil的两个视图是centralOverlay
的子视图。我想保留的人。
因此,我想我的答案与IBOutlet is nil的答案类似-飞行员错误-除了didSet()
处理程序不能解决这个奥秘之外。