首页 > 解决方案 > 从 App Delegate 推送标签栏控制器

问题描述

我有以下代码,我试图推送 Home2ViewController(标签栏控制器),因此用户将在他的 Google 登录过程后被重定向到此:

let viewController: Home2ViewController = storyboard.instantiateViewController(withIdentifier: "HomeVC") as! Home2ViewController;

// error occurs on the following line
let rootViewController = self.window!.rootViewController as! UINavigationController;
rootViewController.pushViewController(viewController, animated: true);

我收到一条错误消息:

在展开可选值时意外发现 nil

在我定义rootViewController.

Home2ViewController是情节提要的子类,并在情节提要中UITabBarController被标识为。HomeVC

如何解决此错误,以便在 Google 登录程序之后显示正确的控制器?

编辑:这是来自 AppDelegate 的 Google 登录方法的完整代码。

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
        if let err = error {
            print("Failed to log into Google", err)
            return
        }

        guard let idToken = user.authentication.idToken else {return}
        guard let accessToken = user.authentication.accessToken else {return}

        let credentials = GoogleAuthProvider.credential(withIDToken: idToken,accessToken: accessToken)
        print("Successfully logged into Google", user)

        Auth.auth().signInAndRetrieveData(with: credentials,  completion: { (user, error) in
            if let err = error {
                print("Failed to create a Firebase user with Google account", err)
                return

            }
            print("Successfully logged into Firebase with Google")

            let storyboard = UIStoryboard(name: "Main", bundle: nil);
            guard let initialViewController = storyboard.instantiateViewController(withIdentifier: "HomeVC") as? Home2ViewController else { return }
            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()

        })        
    }

标签: iosswiftxcode

解决方案


这可能听起来很傻,只要确保标识符名称完全相同,如果这不能解决问题,请将其更改为 storyBoard 和代码中的其他内容,它发生在我身上一次,解决了问题的方法


推荐阅读