Swift:在AppDelegate.swift中执行Segue

时间:2017-10-15 23:35:21

标签: swift

我已成功将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。任何帮助将不胜感激,提前感谢。

1 个答案:

答案 0 :(得分:3)

这里有一些问题:

  1. App Delegate中的全局变量
  2. 有许多答案证明如何在AppDelegate中存储全局变量,然后在视图控制器中引用该变量,例如: getting a reference to app delegate

    1. 仅从基于故事板的控制器执行Segue
    2. 除非您从StoryBoard加载当前的View Controller,否则您将无法使用performSegue(请参阅performSegue)。对于您从AppDelegate加载的任何Google视图,情况可能并非如此。

      1. 您是否在正确的位置登录?
      2. 您可能想重新考虑AppDelegate与初始视图控制器之间的职责划分。也许你正试图在AppDelegate中做太多。也许您应该将这些代码(显示Google表单)中的一部分移动到初始VC,然后根据结果调整或重置导航控制器。

        希望这会有所帮助。