@IBOutlet View равен нулю на viewDidDisappear

У меня есть проблема с пользовательским представлением, используемым в 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 ответов

Другие вопросы по тегам