gpt4 book ai didi

ios - drive 只能从 MainThread 调用

转载 作者:行者123 更新时间:2023-12-01 16:07:36 24 4
gpt4 key购买 nike

在通过代码呈现新的 UIViewController 之后,在每个地方(在 viewModel 或 viewController 中)使用 .Drive,我得到这个错误:drive* 系列方法只能从 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 行后显示的错误。

在之前的 viewController(名为 loginViewController)中,我使用相同的代码但没有收到任何错误,verifyViewController 和 loginViewController 之间唯一不同的是,使用 Storyboard来呈现 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 - drive 只能从 MainThread 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54616586/

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