У меня проблемы с удалением наблюдаемого, даже с использованием disposedBag. Это происходит только в iOS 10.
Мне нужно связать значение TextField (SwiftMaskField) с переменной в viewModel, поэтому я делаю:
class BaseViewController: UIViewController, Storyboarded {
@IBOutlet weak var txtField: SwiftMaskField!
var viewModel: BaseViewModel!
override func viewDidLoad() {
super.viewDidLoad()
bindUI()
}
private func bindUI() {
txtField.rx.text.orEmpty.bind(to: viewModel.myString).disposed(by: viewModel.bag)
viewModel.showLoading.asObservable().skip(1).subscribe(onNext: { [unowned self] in
self.showLoading()
}).disposed(by: viewModel.bag)
}
...
}
class BaseViewModel {
var showLoading = BehaviorRelay<Void>(value: ())
var myString = BehaviorRelay<String>(value:"")
let bag = DisposeBag()
func foo() {
showLoading.accept(())
}
func foo2() {
print(myString.value)
}
...
}
Когда я делаю popViewController , мое приложение вылетает со следующей ошибкой:
*** Завершение работы приложения из-за необработанного исключения ' NSInternalInconsistencyException ', причина:' Экземпляр 0x7fbaafe45a20 класса SwiftMaskText.SwiftMaskField был освобожден, в то время как наблюдатели значения ключа все еще были зарегистрированы в нем. Информация о текущем наблюдении: (Контекст: 0x0, Свойство: 0x6000002596e0>) '
Это происходит только в iOS 10 (не тестировал предыдущие версии), дальнейшие версии не создаются sh.
Также я использую RxSwift 5.0.