gpt4 book ai didi

swift - 从不同的 Storyboard实例化 ViewController 时应用程序崩溃

转载 作者:可可西里 更新时间:2023-11-01 01:17:18 25 4
gpt4 key购买 nike

我正在用 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)
}
}

登录 Storyboard看起来就像这样。

Storyboard example

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

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

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

想象一下情况:

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

libc++abi.dylib: terminating with uncaught exception of type NSException

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

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

  1. 在代码中而不是在 Storyboard中创建导航 Controller
  2. 关闭是不够的 - Storyboard以某种方式保留在内存中,无法再次实例化

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

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

最佳答案

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

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

关于swift - 从不同的 Storyboard实例化 ViewController 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com