【问题标题】:iOS 13: @objc VC.navigationController(_:willShow:animated:) : threading violation: expected the main threadiOS 13:@objc VC.navigationController(_:willShow:animated:):线程违规:预期主线程
【发布时间】:2019-10-22 07:29:26
【问题描述】:

当特定 ViewController 的 NavigationBar 被隐藏时,我在 Fabric 的 Crashlytics 上崩溃了,仅适用于 iOS 13 用户。

我尝试使用 NavigationController 的委托方法隐藏特定 ViewController 的 NavigationBar

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let hide = (viewController is MyVC)
    navigationController.setNavigationBarHidden(hide, animated: animated)
}

但它也会在名为的 crashlytics 上产生崩溃

Fatal Exception: NSInternalInconsistencyException

threading violation: expected the main thread

【问题讨论】:

    标签: ios swift crash uinavigationbar ios13


    【解决方案1】:

    隐藏在主线程中

    Dispatch.main.async {
        navigationController.setNavigationBarHidden(hide, animated: animated)
    }
    

    【讨论】:

    • 如果有帮助请告诉我
    • 如果我尝试在主线程中添加它,那么它将被隐藏并闪烁
    • 然后在没有动画的情况下隐藏它
    • 你为什么不在 MyVC 中设置它?
    • 我之前在 MyVC 中添加过,但是产生了类似的崩溃
    【解决方案2】:

    你是否从后台线程调用navigationController.setNavigationBarHidden

    试试:

    DispatchQueue.main.async { [weak self] in
         self?.navigationController?.setNavigationBarHidden(hide, animated: animated)
    }
    

    【讨论】:

    • 我不会从后台线程调用 navigationController.setNavigationBarHidden。
    • 所以你说threading violation: expected the main thread这个错误是在说谎?
    • 但我只想知道为什么会这样?
    【解决方案3】:

    我得到了解决上述问题的方法,

    我使用 Xcode 10.2.1 上传应用程序的构建,现在我没有遇到任何崩溃。

    【讨论】:

    • 嗨 Nikunj,你能分享你的答案吗
    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多