【发布时间】: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 中。
想象一下情况:
- 用户登录并在关闭第二个 VC 后返回主应用程序
- 正在从 DB 中删除设备
- 检查后,用户需要重新登录
-
forceLogin()和...
libc++abi.dylib:以 NSException 类型的未捕获异常终止
当使用self.present(navController, animated: true, completion: nil) 时会发生这种情况。
我有一些想法可能导致崩溃,但我不确定:
- 在代码中而不是在情节提要中创建导航控制器
- 解雇是不够的 - 故事板不知何故留在内存中,无法再次实例化
什么可能导致问题以及如何避免崩溃?
如果需要更多信息,请询问。
【问题讨论】:
标签: swift uiviewcontroller uistoryboard uistoryboardsegue nsexception