Touch ID 本地身份验证产生线程 12:EXC 错误

Posted

技术标签:

【中文标题】Touch ID 本地身份验证产生线程 12:EXC 错误【英文标题】:Touch ID Local Authentication produces Thread 12: EXC error 【发布时间】:2018-02-13 15:02:29 【问题描述】:

目前,我有以下代码。

if localAuthenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) 
        
        localAuthenticationContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString)  success, evaluateError in
            
            if success 
                self.performSegue(withIdentifier: "settingChange", sender: self)                    //TODO: User authenticated successfully, take appropriate action

如果触摸 id 被正确验证,代码执行到另一个视图控制器,但是当我尝试代码时,我得到这个错误:

我在不使用 TouchID 的情况下尝试了代码,它工作正常,但我不知道为什么它在使用 TouchID 时会产生错误。有人可以帮忙吗?

【问题讨论】:

控制台中有错误信息吗?像主线程的东西?因为performSegue()和UI相关,必须在主线程中完成。另外,上面写着evaluatePolicy() 状态:A closure that is executed when policy evaluation finishes. This is evaluated on a private queue internal to the framework in an unspecified threading context. 【参考方案1】:

performSegue 操作可能存在问题。所有与 UI 更改相关的操作都必须在主队列中执行。将 DispatchQueue 与 main 一起使用。

试试这个看看(注意: 我在 Swift 4 中有解决方案):

if success 

  DispatchQueue.main.async(execute: 
     self.performSegue(withIdentifier: "settingChange", sender: self)
  )


【讨论】:

以上是关于Touch ID 本地身份验证产生线程 12:EXC 错误的主要内容,如果未能解决你的问题,请参考以下文章

Touch ID 身份验证和钥匙串的最佳实践

是否可以仅使用密码进行身份验证,即使设备在 ios 中具有 touch id 功能,swift

在不存储用户生物特征的情况下使用 Touch ID 或 Face ID

Azure 上的联合身份验证

如何在本地 IdentityContext 中注册从外部身份验证提供程序获得的用户

带有 Facebook 身份验证的 Native Sencha Touch 应用程序