使用 viewController 的 performSegue 线程错误? iOS

Posted

技术标签:

【中文标题】使用 viewController 的 performSegue 线程错误? iOS【英文标题】:threading error for performSegue with viewController? iOS 【发布时间】:2020-04-10 00:56:22 【问题描述】:

我在授权用户的 TouchID 后尝试跳转到第二个视图控制器。我能够验证 TouchID 是否正常工作,但我遇到了跳转到第二个 viewController 的问题。

我创建了一个 SecondViewController 和一个带有标识符“dispenseScreen”的 Segue。但是,每当我尝试跳转到第二个屏幕时,我的程序就会崩溃。

@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
        

    

我的代码中没有语义错误,但是当我尝试转到第二个视图控制器时收到线程错误。

【问题讨论】:

【参考方案1】:

您正试图在来自evaluatePolicy 的回调中进行转场。对于涉及 UI 的任何内容,您需要确保您在主线程上:(wasCorrect, error) in DispatchQueue.main.async ...

【讨论】:

成功了,谢谢。如何完全切换屏幕?看起来 PerformSegue 只在第一个屏幕前弹出一个“弹出”窗口 对不起,我不是 UIKit 人。如果您对此有疑问,我建议您制作另一个主题。

以上是关于使用 viewController 的 performSegue 线程错误? iOS的主要内容,如果未能解决你的问题,请参考以下文章

你如何将数据从 ViewController 传递到包含单独 ViewController 的 PageViewController,然后这些 ViewController 将使用这些数据?

实体框架与 NHibernate - 性能

使用 Swift 呈现新的 Viewcontroller 后如何关闭以前的 Viewcontroller?

如何从使用的 viewController 弹回根 ViewController?

使用 ViewController 循环 UIScrollviw

如何在使用 Swift 关闭 ViewController 期间将值从 ViewController B 传递给 ViewController A? [复制]