ошибка многопоточности для executeSegue с viewController? iOS - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь перейти к контроллеру второго вида после того, как авторизовал TouchID пользователя. Я могу проверить, что TouchID работает, но у меня проблема с переходом на второй viewController.

Я создал SecondViewController и Segue с идентификатором «dispenseScreen». Однако всякий раз, когда я пытаюсь перейти ко второму экрану, моя программа вылетает.

@IBAction func touchID(_ sender: Any)
    {

        let context:LAContext = LAContext()

        //Removes Enter Password during failed TouchID
        context.localizedFallbackTitle = ""

        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil)
        {
                context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: "We require your TouchID", reply: { (wasCorrect, error) in

                self.isBiometryReady()
                if wasCorrect {
                    self.performSegue(withIdentifier: "dispenseScreen", sender: self)
                    print("Correct")
                }
                else {
                    print("Incorrect")
                }
            })
        } else {
            //Enter phone password if too many login attempts
            //Add message alerting user that TouchID is not enabled
        }

    }

В моем коде нет ошибок semanti c, но я получаю сообщение об ошибке при попытке go контроллер второго вида.

1 Ответ

1 голос
/ 10 апреля 2020

Вы пытаетесь сделать переход в обратном вызове от evaluatePolicy. Для всего, что связано с пользовательским интерфейсом, вам необходимо убедиться, что вы находитесь в главном потоке: (wasCorrect, error) in DispatchQueue.main.async { ... }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...