替换应用层次结构中的故事板而不是呈现的正确方法

时间:2016-12-28 17:12:40

标签: ios swift storyboard uistoryboard

我有两个故事板如下:(当我添加一个管理故事板时很快就会是3,这就是我将它们分开的原因)

1 - 登录 2 - 乘客故事板

取决于他们是否使用Firebase登录,我是如何确定提供哪一个。我正在使用app delegate的didFinishLaunchingWithOptions加载,如下所示:

    self.window = UIWindow(frame: UIScreen.main.bounds)
    let standbyStoryboard: UIStoryboard = UIStoryboard(name: "StandbyStoryboard", bundle: nil)
    let loginStoryboard: UIStoryboard = UIStoryboard(name: "LoginFlowStoryboard", bundle: nil)

    // First check if the user is logged in
    if let currentUser = FIRAuth.auth()?.currentUser {
        let exampleViewController: StandbyVC = standbyStoryboard.instantiateViewController(withIdentifier: "Standby") as! StandbyVC
        self.window?.rootViewController = exampleViewController
        self.window?.makeKeyAndVisible()

    } else {
        // Not Logged In
        let exampleViewController: LoginViewController = loginStoryboard.instantiateViewController(withIdentifier: "InitialLogin") as! LoginViewController
        self.window?.rootViewController = exampleViewController
        self.window?.makeKeyAndVisible()
    }

当用户退出时,我想关闭Passenger故事板并再次加载初始登录(假设他们已经登录)。我想我会这样做,就像我在登录时用Passenger故事板呈现它们一样:

func logout () {
       
    let loginStoryboard: UIStoryboard = UIStoryboard(name: "LoginFlowStoryboard", bundle: nil)
    let exampleViewController: LoginViewController = loginStoryboard.instantiateViewController(withIdentifier: "InitialLogin") as! LoginViewController
    self.present(exampleViewController, animated: true, completion: nil)
}

这是正确的做法吗?我问的唯一原因是,当调用注销功能并且初次登录再次出现时,看起来我的乘客故事板的主视图控制器上没有调用deinit {}函数(这让我相信这个乘客故事板仍然在某个地方挥之不去,而且我已经堆叠了多个故事板和#34;如果这可能并且有意义的话)

1 个答案:

答案 0 :(得分:1)

  

我问的唯一原因是因为看起来我的乘客故事板的主视图控制器上没有调用deinit {}功能

当然不是,因为您不是替换现有的Passenger视图控制器,而是在其上面呈现 LoginViewController。

但是请理解,对于故事板,多个或其他方面什么 它只是present 的含义。这一切都与视图控制器的管理和应用程序的视图控制器层次结构有关。您对故事板,问题标题和问题本身的全部关注是一个完整的红色鲱鱼。您可以使用一个故事板甚至完全没有故事板来完成您正在做的所有事情,并在整个过程中获得完全相同的结果。