@IBOutlet View在viewDidDisappear上为零

时间:2019-07-16 10:00:21

标签: ios swift viewdiddisappear viewcontroller-lifecyle

我在viewController中使用的自定义视图上遇到问题。

假设使用界面生成器将自定义的xib视图(AddButtonWithOptions,在点击时显示一些选项的按钮)添加到ViewController。

在viewDidDisappear函数上,我正在关闭该按钮的选项。像这样:

 override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        if createButton.isOn {
            createButton.switchOptionState()
        }
    }

通常情况下,当视图消失时,操作会完美无瑕VC关闭选项。但是在crashlytics上,我从以下代码行中得到错误:

 if createButton.isOn {

报告是: 崩溃:com.apple.main-thread EXC_BREAKPOINT 0x00000001005592a0 SalesInvoicesHomeViewController.viewDidDisappear(_ :) + 194

我无法重现该错误,因为该按钮永远不会为零。

这是我在viewController上的按钮实例:

 @IBOutlet weak var createButton: AddButtonWithOptions!

这是我实现自定义xib按钮的设置的方法:


    // Button options
    var options: [AddButtonOption] = [] {
        didSet {
            setupOptions()
        }
    }

/// Flag determines whether state is extended or reduced
    var isOn: Bool = false

 // MARK: Initialization
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        customInit()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        customInit()
    }

    final func customInit() {
        Bundle(for: AddButtonWithOptions.self).loadNibNamed("AddButtonWithOptions", owner: self, options: nil)
        self.addSubview(view)
        view.frame = self.bounds
    }

    // Programmatic initializer
    class func instanceFromNib() -> AddButtonWithOptions {
        return UINib(nibName: "AddButtonWithOptions", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! AddButtonWithOptions
    }

    // MARK: UI Setup: Create an add button for each option
    /// This method is called when options are passed into this component. It simply sets the state to reduced, inits option views and adds them into the options stack container, and assigns delegations
    private func setupOptions() {
        mainAddButton.delegate = self
        // Include options
        optionsContainer.isHidden = true
        optionsContainer.alpha = 0.0
        for option in options {
            let addButtonOptionView = AddButtonOptionView.instanceFromNib()
            addButtonOptionView.addButtonOption = option
            addButtonOptionView.delegate = self
            optionsContainer.addArrangedSubview(addButtonOptionView)
        }
        reduceOuterContainer()
    }

这就是我关闭我的选择的方式:

func switchOptionState() {
        isOn = !isOn
        isOn ? extend() : reduce()
    }

我认为问题是由于ARC而发生的。我认为,经过一段时间后,它将xib视图从内存中清除。

这种情况如何发生?

0 个答案:

没有答案
相关问题