首页 > 解决方案 > 一个出口怎么可能是零,即使它已经设置了

问题描述

我有viewController两个embedded viewControllers通过containers。然后我创建了outlets从 parentviewController's containers到 parent class。我想隐藏或显示containers取决于某些条件。

但如果我简单地写:

  @IBOutlet var twoArmsContainer: UIView! {
        didSet {
            print("SETTING TWO ARM")
        }
    }

 override func viewDidLoad() {
        super.viewDidLoad()
        twoArmsContainer.isHidden = true //container is nil
}

然后它触发打印twoArmsContainer后崩溃。出口如何设置,然后变成?我试过把它藏在里面,效果很好:nil didSetnildidSet

  @IBOutlet var twoArmsContainer: UIView! {
        didSet {
            print("SETTING TWO ARM")
            twoArmsContainer.isHidden = true //WORKS
        }
    }

我还能说什么?class我正在inherits从另一个工作,class所以有一个super.viewDidLoad. 不确定这是否相关。我尝试将其outlets放入super class但结果相同。我还尝试删除并outlets再次阅读。以前从未遇到过这个问题。让我知道是否应该显示更多代码;也许整个class. 不太确定什么是相关的,因为我不知道从哪里开始。

标签: iosswiftuiviewnulliboutlet

解决方案


好的,所以我发现了问题所在;如果不访问代码就无法检测到一个问题,所以回想起来我应该同时发布父级classcontainer class. 对于那个很抱歉。

无论如何,问题是container viewControllerparent viewController. 这使我能够在两者中共享代码container viewControllers

所以结构基本上是这样的:

class WizardChooseArmViewController: WizardViewController {
...

这是parent viewController从 base 继承的viewController。然后container viewControllers看起来像这样:

final class WizardTwoArmsViewController: WizardChooseArmViewController {
...

显然containers从它继承是一个坏主意parent,所以我重构并将其更改为:

final class WizardTwoArmsViewController: WizardViewController {
... 

不太清楚为什么它不可能containersinherit它的parent. 如果有人可以向我简要介绍,那就太好了。


推荐阅读