диск можно вызвать только из MainThread - PullRequest
0 голосов
/ 10 февраля 2019

после представления нового UIViewController по коду, каждый раз (в viewModel или viewController), используя .Drive, я получаю эту ошибку: 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)
}

ошибка, показанная после строки execute .filter.

в предыдущей версии viewController (с именем loginViewController) Я использую те же коды, но не получаю никакой ошибкиединственное, что отличается между verifyViewController и loginViewController, это использование раскадровки для представления этого ViewController (loginViewController).

update: , когда я использую эти коды для представления verifyViewController, все идет нормально:

func goToVerifyPage() {
        DispatchQueue.main.async {
            let verifyVC = VerifyViewController()
            verifyVC.modalTransitionStyle = .flipHorizontal
            self.present(verifyVC, animated: true, completion: nil)
        }
}

1 Ответ

0 голосов
/ 10 февраля 2019

Я предполагаю, что вы звонили goToVerifyPage() из-за сетевого запроса от URLSession.URLSession выдает свои значения в фоновом потоке, поэтому, когда вы будете готовы переключиться на основной поток, вы должны иметь .observeOn(MainThread.instance).

...