我正在尝试实现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()
您可以从主情节提要向控制器提供标识符 按照以下步骤操作。
打开主情节提要
- 单击要打开的视图
- 从该控制器顶部选择黄色/左侧按钮
- 现在打开您的实用程序框,它将在右侧
- 现在点击显示相同的检查器
- 现在,您可以在此处将您的身份作为故事板 ID
查看此答案以获取更多详细信息
UI 操作时使用主队列。您可以通过在后台线程中Auth
获得回调。因此,在您的 else 条件下,使用以下代码执行 segue
DispatchQueue.main.async {
self.window?.rootViewController?.performSegue(withIdentifier: "goToFeed", sender: nil)
}