iOS 13:线程违规:预期主线程。

12

当尝试隐藏视图控制器的导航栏时,该应用程序会在仅限于iOS 13用户的情况下崩溃。

  • 我在Crashlytics of Fabric上收到了以下标题为以下的崩溃:

Fatal Exception: NSInternalInconsistencyException

threading violation: expected the main thread

  • 此崩溃发生在viewWillAppear方法的此行代码上:
    self.navigationController?.isNavigationBarHidden = true
  • 为了在UIViewController的viewWillAppear方法中隐藏导航栏,我正在使用下面的代码:
  • 为了在UIViewController的viewWillAppear方法中隐藏导航栏,我使用以下代码:
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        super.viewWillAppear(animated)
    }
为了在UIViewController的viewWillDisappear方法中显示导航栏,我正在使用以下代码:
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = false
        super.viewWillDisappear(animated)
    }

你是在与主线程不同的线程中执行此过程吗? - Mattia Righetti
@MattiaRighetti, 我并没有在任何线程中执行这个过程。 - Nikunj
@QuangDam 感谢您提供的解决方案,但是这个解决方案能够解决崩溃问题吗? - Nikunj
@Nikunj,你应该向上滚动我发给你的页面,你会看到很多关于这个问题的答案。我认为它可能会有用。 - Quang Dam
@QuangDam 再次遇到了崩溃问题,即使应用了解决方案,仍然会出现相同的问题,但与之前的崩溃相比要少一些,请问是否有关于“期望主线程”的解决方案? - Nikunj
显示剩余4条评论
1个回答

13

执行以下操作

  DispatchQueue.main.async {
    self.navigationController?.isNavigationBarHidden = false
  }

很好,我的朋友。 - Bruno Sosa Fast Tag
@karim 在处理 UI 时,总是需要在主线程中执行操作,例如:self.navigationController?.isNavigationBarHidden = false是与视图相关的操作。 - Saeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接