如何在Swift编程中修复NSInternalInconsistencyException

Concon23b

我正在创建一个新的应用程序,并且要放在一个隐藏的文件夹中。可通过人脸ID /触摸ID进行访问。我已经实现了代码,但是当我运行应用程序并使用Face ID时。应用程序崩溃并显示错误“ NSInternalInconsistencyException”

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.

在我的Viewcontroller中,将视图设置为:

override func viewDidLoad() {
    super.viewDidLoad()


    let cornerRadius : CGFloat = 10.0
    containerView.layer.cornerRadius = cornerRadius
    tableView.clipsToBounds = true
    tableView.layer.cornerRadius = 10.0


    // 1
    let context = LAContext()
    var error: NSError?

    // 2
    // check if Touch ID is available
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
        // 3
        let reason = "Authenticate with Biometrics"
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: {(success, error) in
            // 4
            if success {
                self.showAlertController("Biometrics Authentication Succeeded")
            } else {
                self.showAlertController("Biometrics Authentication Failed")
                }
           })
     }
     // 5
     else {
         showAlertController("Biometrics not available")
    }
}

我希望Face ID / Touch ID能够按预期工作,并且如果经过验证不会崩溃。

chirag90

您正在后台线程上进行UI调用(显示警报),因此出现此问题。

改变以下

if success {
    self.showAlertController("Biometrics Authentication Succeeded")
} else {
    self.showAlertController("Biometrics Authentication Failed")
}

DispatchQueue.main.async {
    if success {
        self.showAlertController("Biometrics Authentication Succeeded")
    } else {
        self.showAlertController("Biometrics Authentication Failed")
    }
}

如果要更新UI部件,请记住始终使用DispatchQueue.main.async运行这些任务。UI更改必须在主线程中运行。

如何使用Swift 4添加FaceID / TouchID

如果您向下滚动到Section,还可以查看使用Face ID或Touch ID将用户登录到您的应用程序-Apple文档Evaluate a Policy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Swift中以编程方式检测iOS11?

如何在Swift中以编程方式更改UICollectionViewCell大小?

如何在Swift中以编程方式访问系统颜色?

如何在Swift中以编程方式创建约束?

如何在SWIFT中以编程方式设置UIImage的Alpha?

如何在Swift中以编程方式移动UIView

如何在Swift中以编程方式创建“返回” UIBarButton项?

如何在ViewController Swift上修复PageMenu

如何在Swift 3.0中以编程方式添加UISegmentedControl?

如何在Swift中以编程方式获取应用ID?

如何在Swift中以编程方式创建UISplitViewController

如何修复致命异常:NSInternalInconsistencyException

如何在Swift中以编程方式更改设备方向?

如何在Mapkit中以编程方式选择特定注释-Swift

如何在Swift 3中修复我的自定义UITextField对象?

如何在Xcode Swift中以编程方式更改UIBarButtunItem功能

如何在macOS上的Swift中以编程方式添加NSView

如何修复“ NSInternalInconsistencyException”,原因:“无效更新:第0部分中的行数无效。”

如何在Swift 5.1中修复“无法不带参数地调用'发送'”

如何在Swift中修复“ UIAlertController的ActionSheet具有冲突约束”错误

如何在Swift中以编程方式复制视图?自动布局如何影响新创建的视图?

如何在Swift编程中解析NSMutableDictionary?

如何在Mac Project中修复main.swift?

如何在 Swift 中修复“线程 1:致命错误:在展开可选值时意外发现 nil”

如何在 Swift 4 中以编程方式注册 UITableViewHeaderFooterView?

在 macOS 10.14 上运行时如何修复 TornadoFX 中的 NSInternalInconsistencyException?

如何在 iOS 上的 Swift 中以编程方式获取 UDID

如何在 Swift 中修复 UILabel 的剪切

如何在 VB .net 中以编程方式修复字符串中的括号?