Swift:在AppDelegate.Swift中执行Segue

Swift:在AppDelegate.Swift中执行Segue,swift,Swift,我已经成功地将Google登录集成到我的AppDelegate.swift文件中的iOS应用程序中,并且可以成功地检测到成功登录(通过在控制台上打印“success”(成功)。问题是,成功登录后,当我想进入应用程序的下一个屏幕时,我会回到谷歌登录页面 AppDelegate.swift文件无法识别performsgue函数,因为它是UIViewController类的函数(如果我错了,请更正)。为了解决这个问题,我在ViewController文件中创建了一个全局变量,以便在更改此值时执行seg

我已经成功地将Google登录集成到我的AppDelegate.swift文件中的iOS应用程序中,并且可以成功地检测到成功登录(通过在控制台上打印“success”(成功)。问题是,成功登录后,当我想进入应用程序的下一个屏幕时,我会回到谷歌登录页面

AppDelegate.swift文件无法识别performsgue函数,因为它是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。任何帮助都将不胜感激,提前感谢

这里有几个问题:

  • 应用程序委托中的全局变量
  • 有许多答案演示了如何在AppDelegate中存储全局变量,然后在视图控制器中引用该变量,例如

  • 仅从基于情节提要的控制器执行分段
  • 除非当前视图控制器是从情节提要加载的,否则将无法使用performSegue(请参阅)。无论从AppDelegate加载什么Google视图,情况可能都不是这样

  • 您是否在正确的位置登录
  • 您可能需要重新考虑AppDelegate和初始视图控制器之间的职责划分。也许您试图在AppDelegate中执行太多操作。也许你应该将这些代码(显示谷歌表单)移到你的初始VC中,然后根据结果继续或重置你的导航控制器


    希望这有帮助

    这里有几个问题:

  • 应用程序委托中的全局变量
  • 有许多答案演示了如何在AppDelegate中存储全局变量,然后在视图控制器中引用该变量,例如

  • 仅从基于情节提要的控制器执行分段
  • 除非当前视图控制器是从情节提要加载的,否则将无法使用performSegue(请参阅)。无论从AppDelegate加载什么Google视图,情况可能都不是这样

  • 您是否在正确的位置登录
  • 您可能需要重新考虑AppDelegate和初始视图控制器之间的职责划分。也许您试图在AppDelegate中执行太多操作。也许你应该将这些代码(显示谷歌表单)移到你的初始VC中,然后根据结果继续或重置你的导航控制器


    希望这有帮助

    注:请注意,将您的初始值VC设置为GIDSignInDelegate和GIDSignInUIDelegate是可以的。这简化了事情,您可以找到大量使用该方法的示例。但是,如果您想让您的AppDelegate充当GidSignInElegate,让您的VC充当GIDSignInUIDelegate(如代码片段中所示),那么您可能需要考虑使用NotificationCenter将消息从AppDelegate的signIn func传递给VC。观察者(将在你的VC中)可以进行性能测试或其他任何操作。谢谢你的回复!我尝试将Google登录代码移动到我的VC中,但由于某种原因,该函数从未被调用……我很困惑为什么。你有什么想法吗?附言:请注意,让你的初始VC成为GIDSignInDelegate和gidsigninudelegate是可以的。这简化了事情,您可以找到大量使用该方法的示例。但是,如果您想让您的AppDelegate充当GidSignInElegate,让您的VC充当GIDSignInUIDelegate(如代码片段中所示),那么您可能需要考虑使用NotificationCenter将消息从AppDelegate的signIn func传递给VC。观察者(将在你的VC中)可以进行性能测试或其他任何操作。谢谢你的回复!我尝试将Google登录代码移动到我的VC中,但由于某种原因,该函数从未被调用……我很困惑为什么。你有什么想法吗?