Swift:在AppDelegate.swift中执行Segue
我已成功将Google Sign-In集成到我的AppDelegate.swift文件的iOS应用程序中,并且可以成功检测到成功登录(通过在控制台上打印“success” )。问题是,在成功登录后,当我想要进入应用程序的下一个屏幕时,我回到Google Sign-In页面。Swift:在AppDelegate.swift中执行Segue
AppDelegate.swift文件无法识别performSegue函数,因为它是UIViewController类的函数(请纠正我,如果我错了)。为了解决这个问题,我创建的视图控制器文件中的全局变量,这样,每当此值被改变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.
}
这没有工作,我觉得这不工作的原因是userSignedInGlobal在InitialViewController.swift文件被通过引用传递 - 因此即使它的价值变化,userSignedIn的价值呢不是cha恩格(再次,如果我错了,请纠正我)。
要解决这个问题,我改变了我的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。任何帮助将不胜感激,在此先感谢。
这里有几个问题:
在应用程序委托- 全局变量
有许多答案演示如何全局变量存储在您的AppDelegate和随后引用该变量在视图控制器,例如getting a reference to app delegate
- 只能从故事板执行Segue公司基于控制器
- 您是否在正确的位置进行登录?
您将无法使用performSegue除非当前视图控制器从故事板加载(见performSegue) 。从你的AppDelegate加载的任何Google视图可能都不是这种情况。
您可能想重新考虑AppDelegate和您的初始视图控制器之间的职责分工。也许你正试图在AppDelegate中做太多。也许你应该将一些代码(显示Google表单)移动到你的初始VC,然后根据结果重新设置或重置你的导航控制器。
希望这会有所帮助。
PS:请注意,您的initialVC可以是GIDSignInDelegate和GIDSignInUIDelegate。这简化了一些事情,你可以找到很多使用这种方法的例子。然而,如果你想让你的AppDelegate充当GIDSignInDelegate并且你的VC充当GIDSignInUIDelegate(如你的代码片段所示),那么你可能需要看看使用NotificationCenter从AppDelegate的signIn func传递消息,到你的VC。观察者(可能在您的VC中)可以执行一次执行任务或其他任何事情。 – ozzieozumo
感谢您的回复!我尝试将Google Sign In代码移到我的VC中,但由于某种原因,该函数从未被调用......我为什么会感到困惑。你有什么想法? –