【发布时间】:2021-02-25 09:16:17
【问题描述】:
我尝试了一些方法,但找不到解决方案。我在 onNext 块中导航控制器,但 deinit 没有调用。我还在 rx 闭包中声明了 self 是弱的。
下面是完整的类代码。 如果我做错了什么请纠正:
class LoginVC: UIViewController {
//MARK:- Variables & Consts
private let tag = "LoginVC"
private let loginViewModel = LoginViewModel()
private let disposeBag = DisposeBag()
//MARK:- IBOutlets
@IBOutlet weak var tfUsername: MFTextField!
@IBOutlet weak var tfPassword: MFTextField!
@IBOutlet weak var btnLogin: UIButton!
//MARK:- View Controller Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
setupBindings()
}
///deinit
deinit {
print(" deinit")
}
//MARK:- Custom Methods
private func setupBindings() {
loginViewModel
.loginResponse
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] loginResponse in
let vc = UIStoryboard(name: Constants.MAIN, bundle: nil).instantiateViewController(withIdentifier: Constants.HOME_VC)
self?.navigationController?.pushViewController(vc, animated: true)
}, onError: { [weak self] error in
self?.removeLoader()
}, onCompleted: { [weak self] in
self?.removeLoader()
}, onDisposed: { [weak self] in
print("\(self?.tag ?? "") onDisposed")
})
.disposed(by: disposeBag)
btnLogin.rx.tap.bind{ [weak self] in
self?.loginViewModel.login(username: self?.tfUsername.text ?? "", password: self?.tfPassword.text ?? "")
}.disposed(by: disposeBag)
}
}
任何帮助将不胜感激。
【问题讨论】:
-
@bseh 您提供的链接完全不相关 感谢您分享想法。
-
您分享的代码中没有视图控制器。
-
您希望何时调用它?您是否正确关闭了此视图控制器?
-
@RukshanMarapana 我已经更新了代码,请检查我将其导航到下一个控制器的 .subscribe 块,结果仍然相同。
标签: ios swift reactive-programming rx-swift rx-cocoa