从不同的故事板实例化 ViewController 时应用程序崩溃
App crashing when instantiating ViewController from different storyboard
我正在写 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。
想象一下情况:
- 用户在关闭第 2 个 VC
后登录并返回主应用程序
- 正在从数据库中删除设备
- 检查后,用户需要重新登录
forceLogin()
和...
libc++abi.dylib: terminating with uncaught exception of type NSException
当使用self.present(navController, animated: true, completion: nil)
时发生。
我知道可能导致崩溃的原因,但我不确定:
- 在代码中而不是在故事板中创建导航控制器
- 关闭是不够的 - 故事板以某种方式保留在内存中并且无法再次实例化
什么会导致问题,如何避免崩溃?
如果需要更多信息,请询问。
我总是忘记这一点。请记住像这样放置您的界面任务:
DispatchQueue.main.async {
self.present(navController, animated: true, completion: nil)
}
我正在写 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。
想象一下情况:
- 用户在关闭第 2 个 VC 后登录并返回主应用程序
- 正在从数据库中删除设备
- 检查后,用户需要重新登录
forceLogin()
和...
libc++abi.dylib: terminating with uncaught exception of type NSException
当使用self.present(navController, animated: true, completion: nil)
时发生。
我知道可能导致崩溃的原因,但我不确定:
- 在代码中而不是在故事板中创建导航控制器
- 关闭是不够的 - 故事板以某种方式保留在内存中并且无法再次实例化
什么会导致问题,如何避免崩溃?
如果需要更多信息,请询问。
我总是忘记这一点。请记住像这样放置您的界面任务:
DispatchQueue.main.async {
self.present(navController, animated: true, completion: nil)
}