通过代码显示新的UIViewController之后,使用.Drive的每个位置(在viewModel或viewController中)之后,都会出现此错误:drive* family of methods can be only called from MainThread
这就是我介绍新的ViewController的方式:
func goToVerifyPage() {
let verifyVC = VerifyViewController()
verifyVC.modalTransitionStyle = .flipHorizontal
self.present(verifyVC, animated: true, completion: nil)
}
在VerifyViewController内部:
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之间唯一的不同是,使用情节提要来呈现该ViewController(loginViewController)。
更新:
当我使用此代码来呈现verifyViewController时,一切正常:
func goToVerifyPage() {
DispatchQueue.main.async {
let verifyVC = VerifyViewController()
verifyVC.modalTransitionStyle = .flipHorizontal
self.present(verifyVC, animated: true, completion: nil)
}
}
最佳答案
我的猜测是您是从URLSession发出网络请求的结果中调用goToVerifyPage()
的。 URLSession在后台线程上发出其值,因此当您准备切换到主线程时,应该有一个.observeOn(MainThread.instance)
。
关于ios - 只能从MainThread调用驱动器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54616586/