gpt4 book ai didi

ios - Observable 不响应 .drive 方法

转载 作者:行者123 更新时间:2023-11-30 11:20:10 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个依赖于持久存储中的值的 View 。 session 中第一次(安装或终止应用程序后打开)该值将保存到持久存储并正确显示。但是,如果我注销并重新登录(同一 session ),则 View 不包含持久存储中的我的值。

我有理由相信我对 View 模型中可观察到的“用户”的订阅存在问题,但我不确定。

我插入了 print 语句,发现在这种情况下 .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)"
}
}
}

最佳答案

看来您的 View Controller 仅订阅viewDidLoad,但如果在注销/登录时释放订阅,您将不会再获得任何元素。由于 viewDidLoad 仅触发一次(假设您不重新创建 View Controller ),因此您将不会重新订阅。

尝试添加.debug("潜在收入驱动因素"),例如:

viewModel.potentialEarnings
.debug("potential earnings driver")
.drive(myView.rx.potentialEarnings)
.disposed(by: disposeBag)

并检查控制台是否/何时处理订阅。

关于ios - Observable 不响应 .drive 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com