在我的应用程序中,我有一个视图依赖于持久性存储中的值。在会话中的第一次(杀死应用程序后安装或打开),该值将保存到永久性存储中并正确显示。但是,如果我注销并重新登录(同一会话),则该视图将不包含持久存储中的值。
我有理由相信我对viewmodel中可观察到的“用户”的订阅存在问题,但是我不确定。
我插入了打印语句,发现.map函数的关闭在这种情况下甚至不会触发。有什么想法吗?
MyViewController.swift
let myView: MyView
private let viewModel: MyViewModel
override init() {
...
viewModel = MyViewModel(...)
}
override func viewDidLoad(){
...
viewModel.potentialEarnings.drive(myView.rx.potentialEarnings).disposed(by: disposeBag)
}
MyViewModel.swift
let potentialEarnings: Driver<String>
init() {
...
potentialEarnings = User.currentUser(in: getBackgroundContext).map({
user -> String? in
let earnings = user.potentialEarnings
return earnings
}).unwrap().asDriver(onErrorJustReturn: "")
}
MyView.swift
extension Reactive where Base : MyView {
var potentialEarnings: Binder<String> {
return Binder(self.base) { myView, potentialEarnings in
myView.topLabel.text = "Some Text with: \(potentialEarnings)"
}
}
}
答案 0 :(得分:0)
看来您的视图控制器仅订阅viewDidLoad
,但是如果在注销/登录时取消了订阅,则不会再获得任何元素。由于viewDidLoad
仅触发一次(假设您不重新创建视图控制器),因此您将不会重新订阅。
尝试添加.debug("potential earnings driver")
,例如:
viewModel.potentialEarnings
.debug("potential earnings driver")
.drive(myView.rx.potentialEarnings)
.disposed(by: disposeBag)
并检查控制台是否/何时取消订阅。