驱动器可以从MainThread只叫

问题描述 投票:1回答:1

通过代码提出了新的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)
        }
}
ios rx-swift
1个回答
2
投票

我的猜测是,你是从URLSession网络请求的结果调用goToVerifyPage()。 URLSession发出在后台线程它的价值,所以当你准备好切换到主线程,你应该有一个.observeOn(MainThread.instance)

© www.soinside.com 2019 - 2024. All rights reserved.