来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作
Posted
技术标签:
【中文标题】来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作【英文标题】:Swift 3 from appDelegate performSegue is not working after google signin 【发布时间】:2017-06-13 11:48:05 【问题描述】:我正在尝试实现 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 不起作用..或者如果有人遇到这个问题并且他们想通了,请分享解决方案。任何帮助将不胜感激。
【问题讨论】:
使用main thread
进行转场
window 和 rootViewController 是否都设置为值?
dispatch_async(dispatch_get_main_queue(), print(results) completion(success: true, object: results) ) 否则这样使用
【参考方案1】:
从 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()
您可以从 Main.storyboard 为您的控制器提供 Identifier 请按照以下步骤操作。
打开主故事板
-
点击您要打开的视图
从控制器顶部选择黄色/向左按钮
现在打开位于右侧的实用工具箱
现在点击 Show the Identical Inspector
现在您可以在此处将您的身份作为 StoryBoard Id 提供
Check this answer for more details
【讨论】:
【参考方案2】:在处理 UI 操作时使用主队列。您在后台线程中通过Auth
获得回调。所以在你的 else 条件下,使用下面的代码来执行 segue
DispatchQueue.main.async
self.window?.rootViewController?.performSegue(withIdentifier: "goToFeed", sender: nil)
【讨论】:
以上是关于来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
来自 appDelegate 的 javascript 调用:phonegap iOS
来自 AppDelegate 的 PresentViewController 句柄ActionWithIdentifier
SWRevealViewController 不显示来自 Appdelegate 的状态栏推送
来自 appDelegate 的 pushViewController - 问题