2016-12-28 3 views
0

У меня 2 раскадровки следующим образом: (скоро будет 3, когда я добавляю в админ раскадровки, который почему я отделяя их)Правильный способ заменить раскадровку в Иерархии Apps, в отличие от Представляя более

1 - Войти 2 - Раскадровка для пассажиров

В зависимости от того, вошли ли они в систему или нет, Firebase определяет, как я определяю, какой из них представлен. Я загружаю с помощью 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() 
    } 

Когда пользователь выходит из системы, я хотел бы, чтобы закрыть Пассажирскую раскадровку и загрузить начальный логин один раз (при условии, что они вошел в систему). Я полагал, что я хотел бы сделать это как так, так же, как я представляю их с пассажирской раскадровки при входе в систему:

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 {} не вызывается на главном контроллере представления моего раскадровки для пассажиров, когда вызывается функция выхода из системы, и снова появился начальный логин (что заставило меня поверить в эту раскладку для пассажиров все еще сохраняющиеся где-то и что я «укладки нескольких раскадровки», если это возможно, и имеет смысл)

ответ

1

Единственная причина, почему я спрашиваю, потому что кажется, что функция Deinit {} не вызывался на главном экране контроллер моего пассажира раскадровку

конечно нет, потому что вместо замены экс isting контроллер просмотра пассажиров, вы находитесь , представляя LoginViewController поверх него.

Но, пожалуйста, поймите, что у него есть ничего, кроме, чтобы делать раскадровки, несколько или иначе! Это просто то, что presentозначает. Все это связано с управлением контроллерами представлений и иерархией контроллера вашего приложения. Вся ваша забота о раскадровки, в вашем вопросе и в самом вопросе - это полная красная селедка. Вы можете делать все, что вы делаете, с одной раскадрой или даже без раскадровки вообще, и получить точно такой же результат повсюду.

+0

Gotcha! Спасибо, что поняла, что это так. Какие-либо рекомендации относительно того, как правильно представить презентационную версию вместо текущей раскадровки? Я изменю свой титул, чтобы сделать его более понятным. – Belvedare

+0

Вы не представляете раскадровку. Вы представляете контроллер вида. Это может помочь вам остановиться и узнать об объектно-ориентированном программировании (классы и экземпляры), о том, что такое диспетчер представлений, и что такое раскадровка. – matt

Смежные вопросы