【问题标题】:App crashing when instantiating ViewController from different storyboard从不同的故事板实例化 ViewController 时应用程序崩溃
【发布时间】:2018-01-25 22:47:00
【问题描述】:

我正在使用 Swift 3(最新的 Xcode)编写代码

我正在控制,如果用户登录(异步任务检查设备和数据库之间的参数)。

如果响应显示设备无效,我将显示登录屏幕。看起来像这样:

extension UIViewController {

    func forceLogin() {

        let storyboard = UIStoryboard(name: "Login", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "LoginViewController")
        let navController = UINavigationController(rootViewController: controller)

        self.present(navController, animated: true, completion: nil)
    }  
}

登录故事板看起来就像这样。

当用户登录成功后,函数启动:

DispatchQueue.main.async {
    self.dismiss(animated: true, completion: nil)
}

解雇可能发生在第一个和第二个 ViewController 中。

想象一下情况:

  1. 用户登录并在关闭第二个 VC 后返回主应用程序
  2. 正在从 DB 中删除设备
  3. 检查后,用户需要重新登录
  4. forceLogin() 和...

libc++abi.dylib:以 NSException 类型的未捕获异常终止

当使用self.present(navController, animated: true, completion: nil) 时会发生这种情况。

我有一些想法可能导致崩溃,但我不确定:

  1. 在代码中而不是在情节提要中创建导航控制器
  2. 解雇是不够的 - 故事板不知何故留在内存中,无法再次实例化

什么可能导致问题以及如何避免崩溃?

如果需要更多信息,请询问。

【问题讨论】:

    标签: swift uiviewcontroller uistoryboard uistoryboardsegue nsexception


    【解决方案1】:

    我总是忘记这一点。请记住将您的界面任务像这样放置:

    DispatchQueue.main.async {
       self.present(navController, animated: true, completion: nil)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 2012-02-27
      • 2014-06-06
      • 2012-06-10
      • 2012-01-17
      • 2013-11-30
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多