通过代码提出了新的UIViewController后,每一个地方使用.Drive(或视图模型中的viewController),我得到这个错误:drive* family of methods can be only called from MainThread
这就是我提出新的视图控制器:
func goToVerifyPage() {
let verifyVC = VerifyViewController()
verifyVC.modalTransitionStyle = .flipHorizontal
self.present(verifyVC, animated: true, completion: nil)
}
和内部验证的ViewController:
override func viewDidLoad() {
super.viewDidLoad()
confirmVerifyCodeBTN.rx.tap
.asDriver()
.debounce(1)
.filter({
self.viewModel.signupEnabled
})
.drive(onNext:{ [weak self] _ in
guard let verifyCode = self?.verificationCodeTF.text else { return }
self?.verifyActivateCode(verifyCode)
}).disposed(by: disposeBag)
}
错误表现为执行.filter行之后。
在previos的viewController(名为loginViewController)我使用相同的代码,但没有得到任何错误,这是verifyViewController和loginViewController之间的不同之处在于,使用故事板呈现该视图控制器(loginViewController)的唯一的事情。
更新:在使用此代码呈现验证我的UIViewController一切都会罚款:
func goToVerifyPage() {
DispatchQueue.main.async {
let verifyVC = VerifyViewController()
verifyVC.modalTransitionStyle = .flipHorizontal
self.present(verifyVC, animated: true, completion: nil)
}
}
我的猜测是,你是从URLSession网络请求的结果调用goToVerifyPage()
。 URLSession发出在后台线程它的价值,所以当你准备好切换到主线程,你应该有一个.observeOn(MainThread.instance)
。