2

实例化视图控制器,当我写的斯威夫特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) 
    } 
} 

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

Storyboard example

当用户成功登录时,该功能开始:

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

解雇可以在第一和第二视图控制器发生。

想象一下这种情况:

  1. 在用户登录并驳回第二VC
  2. 设备正在从数据库中删除
  3. 检查后,用户需要重新登录
  4. 后回来主要应用
  5. forceLogin()和...

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

这发生在使用self.present(navController, animated: true, completion: nil)时。

我有一些想法什么可能引起死机,但我不知道:

  1. 在代码中的故事板
  2. 辞退创建导航控制器反而是不够的 - 故事板莫名其妙地停留在内存中,可以” t再次实例化

什么会导致问题,以及如何避免崩溃?

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

回答

2

我总是忘记这一点。记住你的界面任务是这样的:

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