我已成功将Google登录集成到我的AppDelegate.swift文件中的iOS应用中,并且可以成功检测到成功登录(通过将“成功”打印到控制台上)。问题是,在成功登录后,当我想要进入应用的下一个屏幕时,我会回到Google登录页面。
AppDelegate.swift文件无法识别performSegue函数,因为它是UIViewController类的函数(如果我错了,请纠正我)。为了解决这个问题,我在ViewController文件中创建了一个全局变量,这样只要这个值发生变化就会执行segue:
AppDelegate.swift:
var userSignedInGlobal = "n/a"
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
// A bunch of code that implements the Google Sign in ...
print("Successfully logged into Google.", user)
userSignedInGlobal = "success"
}
然后是我的InitialViewController.swift文件:
class InitialViewController: UIViewController, GIDSignInUIDelegate {
var userSignedIn = userSignedInGlobal {
didSet {
performSegue(withIdentifier: "segueOne", sender: self)
}
}
// A bunch of irrelevant code.
}
这不起作用,我认为这不起作用的原因是InitialViewController.swift文件中的userSignedInGlobal是通过引用传递的 - 所以即使它的值发生变化,userSignedIn的值也不会改变(再次,如果我错了,请纠正我。)
为了解决这个问题,我更改了我的InitialViewController.swift文件,如下所示:
var userSignedIn = userSignedInGlobal {
didSet {
doSegue()
}
}
class InitialViewController: UIViewController, GIDSignInUIDelegate {
func doSegue() {
performSegue(withIdentifier: "segueOne", sender: self)
}
// A bunch of irrelevant code.
}
这给了我第三行的错误:“使用未解析的标识符'doSegue()'”
登录成功时,我不知道如何执行segue。任何帮助将不胜感激,提前感谢。
答案 0 :(得分:3)
这里有一些问题:
有许多答案证明如何在AppDelegate中存储全局变量,然后在视图控制器中引用该变量,例如: getting a reference to app delegate
除非您从StoryBoard加载当前的View Controller,否则您将无法使用performSegue(请参阅performSegue)。对于您从AppDelegate加载的任何Google视图,情况可能并非如此。
您可能想重新考虑AppDelegate与初始视图控制器之间的职责划分。也许你正试图在AppDelegate中做太多。也许您应该将这些代码(显示Google表单)中的一部分移动到初始VC,然后根据结果调整或重置导航控制器。
希望这会有所帮助。