如何解决无法在 AppDelegate 代码块中实例化正确的 VC
我的目标是在用户是否从 AppDelegate.swift
文件登录时简单地实例化某个视图控制器。在过去的几个小时里,我一直在阅读有关尝试在 SceneDelegate
而不是 AppDelegate
中执行此操作的文章,但我只是整体感到困惑。
我还使用状态侦听器在当前用户登录时保留当前用户。我知道这是其他代码行而不是状态侦听器的问题,当我在我的应用程序上登录时,离开模拟器窗口模拟器仍在运行,重新运行模拟器,并看到控制台中打印了我的名字,这意味着我仍然处于登录状态。因此状态侦听器工作正常,只需要其他代码行的帮助。
这是我的 AppDelegate.swift
文件中 didFinishLaunchingWithOptions()
方法的代码。
FirebaseApp.configure()
let storyboard = UIStoryboard(name: "Main",bundle: nil)
let auth = Auth.auth()
auth.addStateDidchangelistener { (_,user) in
print(user?.displayName)
switch user {
case nil:
guard self.activeViewController! is StudentSegmentedTableViewController else { return }
let nonLoggedInViewController = storyboard.instantiateViewController(withIdentifier: Constants.StoryboardIDs.GothereMainMenuStoryboardID) as! GothereMainMenuViewController
self.navigationController.setViewControllers([nonLoggedInViewController],animated: false)
self.navigationController.popToViewController(nonLoggedInViewController,animated: true)
self.activeViewController = nonLoggedInViewController
default:
guard self.activeViewController! is GothereMainMenuViewController else { return }
let alreadyLoggedInViewController = storyboard.instantiateViewController(withIdentifier: Constants.StoryboardIDs.StudentEventDashboardStoryboardID) as! StudentSegmentedTableViewController
self.navigationController.setViewControllers([alreadyLoggedInViewController],animated: false)
self.navigationController.popToViewController(alreadyLoggedInViewController,animated: true)
self.activeViewController = alreadyLoggedInViewController
}
}
let nonLoggedInViewController = storyboard.instantiateViewController(withIdentifier: Constants.StoryboardIDs.GothereMainMenuStoryboardID) as! GothereMainMenuViewController
let alreadyLoggedInViewController = storyboard.instantiateViewController(withIdentifier: Constants.StoryboardIDs.StudentEventDashboardStoryboardID) as! StudentSegmentedTableViewController
switch Auth.auth().currentUser != nil {
case true:
activeViewController = alreadyLoggedInViewController
default:
activeViewController = nonLoggedInViewController
}
navigationController = UINavigationController.init(rootViewController: activeViewController)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
下面的其余部分是与问题无关的额外内容。我只是想知道代码是否正确,我试图通过注释掉某些行、更改方法来玩弄它,但是我不断收到 viewControllers 为 nil 的解包错误,我也不明白。实例化的标识符完全匹配,没有拼写错误,viewControllers 也确实存在。我不知道如何解决这个问题,如果有人以前做过这件事并且知道该怎么做,我们将不胜感激。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。