@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-вид из памяти.
Как эта ситуация может произойти?