来自 appDelegate performSegue 的 Swift 3 在 google 登录后无法正常工作



我正在尝试实现Google登录及其登录过程,但是在我的应用程序委托文件中,我有didSignInFor功能,并且在成功登录后关闭了内部,我将用户从loginVC发送到feedVc

它转到该行并打印下一行中的内容,但不执行 Segue。
这是代码:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    print("Successfully logged into google", user)
    guard let idToken = user.authentication.idToken else {return}
    guard let accessToken = user.authentication.accessToken else {return}
    let credential = GoogleAuthProvider.credential(withIDToken: idToken, accessToken: accessToken)
    Auth.auth().signIn(with: credential) { (user, error) in
        if error != nil{
            print("ANKIT : Unable to authenticate with firebase")
        } else{
            guard let uid = user?.uid else { return }
            KeychainWrapper.standard.set(uid, forKey: KEY_UID)
            self.window?.rootViewController?.performSegue(withIdentifier: "goToFeed", sender: nil)
            print("ANKIT : Successfully authenticated with firebase for google")
        }
    }
}

任何人都可以帮助我解决此错误吗?
无法弄清楚为什么 segue 不起作用。.或者,如果有人遇到此问题并且他们想通了,请分享解决方案。任何帮助将不胜感激。

从 AppDelegate 类中,您无法perform segue 。所以这条线在你的AppDelegate课上永远行不通。

self.window?.rootViewController?.performSegue(withIdentifier: "goToFeed", sender: nil)

你需要简单

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let scheduleController = storyboard.instantiateViewController(withIdentifier: "yourIdentiFier")
self.window!.rootViewController = scheduleController
self.window!.makeKeyAndVisible()

您可以从主情节提要向控制器提供标识符 按照以下步骤操作。

打开主情节提要

  1. 单击要打开的视图
  2. 从该控制器顶部选择黄色/左侧按钮
  3. 现在打开您的实用程序框,它将在右侧
  4. 现在点击显示相同的检查器
  5. 现在,您可以在此处将您的身份作为故事板 ID

查看此答案以获取更多详细信息

在使用

UI 操作时使用主队列。您可以通过在后台线程中Auth获得回调。因此,在您的 else 条件下,使用以下代码执行 segue

DispatchQueue.main.async {
            self.window?.rootViewController?.performSegue(withIdentifier: "goToFeed", sender: nil)
}

最新更新