提问人:Joakim Sjöstedt 提问时间:1/26/2021 更新时间:1/27/2021 访问量:249
即使已经设置了插座,它怎么可能为零
How can an outlet be nil even though it has been set
问:
我有两个通过.然后我从父级创建到父级。我想隐藏或显示取决于某些条件。viewController
embedded
viewControllers
containers
outlets
viewController's
containers
class
containers
但是,如果我只是简单地写:
@IBOutlet var twoArmsContainer: UIView! {
didSet {
print("SETTING TWO ARM")
}
}
override func viewDidLoad() {
super.viewDidLoad()
twoArmsContainer.isHidden = true //container is nil
}
然后,在触发打印后,它会崩溃。插座怎么可能设置好,但随后变成?我试过把它藏在里面,效果很好:twoArmsContainer
nil
didSet
nil
didSet
@IBOutlet var twoArmsContainer: UIView! {
didSet {
print("SETTING TWO ARM")
twoArmsContainer.isHidden = true //WORKS
}
}
我还能说什么?我正在从另一个工作,所以有一个.不确定这是否相关。我试着把 但结果相同。我还尝试删除并重新添加。以前从未遇到过这个问题。让我知道我是否应该显示更多代码;也许整个.不太确定什么是相关的,因为我不知道从哪里开始。class
inherits
class
super.viewDidLoad
outlets
super class
outlets
class
答:
好的,所以我发现了问题所在;如果不访问代码,则无法检测到问题,因此回想起来,我应该同时发布父级和.对不起。class
container
class
无论如何,问题是继承自 .这使我能够在两者中共享代码。container
viewController
parent
viewController
container
viewControllers
所以结构基本上是这样的:
class WizardChooseArmViewController: WizardViewController {
...
这是从基础继承的。然后看起来像这样:parent
viewController
viewController
container
viewControllers
final class WizardTwoArmsViewController: WizardChooseArmViewController {
...
显然,从它的继承是一个坏主意,所以我重构并将其更改为:containers
parent
final class WizardTwoArmsViewController: WizardViewController {
...
不太确定为什么它不可能从它的.如果有人能向我介绍情况,那就太好了。containers
inherit
parent
评论
IBOutlet