无法在 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...