Как я go для "входа" ViewController, если FirebaseAuth имеет значение null? - PullRequest
0 голосов
/ 18 января 2020

Я новичок в Swift и у меня очень простая настройка. Существует экран входа в систему, и если пользователь входит в систему с правильными учетными данными, они go к первому V C в панели вкладок.

Переход от входа в систему к контроллерам панели вкладок работает нормально, но когда Я загружаю приложение. Я не попадаю на экран входа в систему, если currentUser равен nil.

Вот мой чек в первом V C на панели вкладок:

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    if Auth.auth().currentUser == nil {
      goToLogin()
    }
}

И это является функцией в том же V C для go для входа в систему

func goToLogin() {
    let loginViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.loginViewController) as? LoginViewController

    view.window?.rootViewController = loginViewController
    view.window?.makeKeyAndVisible()
}

Идентификатор раскадровки для моего входа в систему V C - это "loginViewController", а контроллер панели вкладок - мой начальный контроллер представления

Обновление Моя проверка подлинности в App Delegate выглядит следующим образом:

if Auth.auth().currentUser == nil {
        // considering the StoryboardID is same as View Controllers name.
        self.makeRootVC(storyBoardName: "Main", vcName: Constants.Storyboard.loginViewController)
       } else {
        self.makeRootVC(storyBoardName: "Main", vcName: Constants.Storyboard.homeTabBarController)
       }

Но я получаю эту ошибку от "homeTabBarController":

Тип 'Constants.Storyboard' не имеет члена 'homeTabBarController'

homeTabBarController - это StoryboardId для моего контроллера панели вкладок в главной раскадровке. Так почему же его не признают?

1 Ответ

1 голос
/ 18 января 2020

Вы должны сделать эту проверку в didFinishLaunchingWithOptions в AppDelegate, а не в ViewController. Вы можете использовать приведенную ниже функцию для изменения вашего root вида контроллера.

В AppDelegate.swift

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    if Auth.auth().currentUser == nil {
        // considering the StoryboardID is same as View Controllers name. 
        self.makeRootVC(storyBoardName: "Main", vcName: Constants.Storyboard.loginViewController)
       } else { 
        self.makeRootVC(storyBoardName: "Main", vcName: Constants.Storyboard.yourTabBarController)
       }
    return true
}


func makeRootVC(storyBoardName : String, vcName : String) {
        let vc = UIStoryboard(name: storyBoardName, bundle: Bundle.main).instantiateViewController(withIdentifier: vcName)
        let nav = UINavigationController(rootViewController: vc)
        nav.navigationBar.isHidden = true
        self.window?.rootViewController = nav
        let options: UIView.AnimationOptions = .transitionCrossDissolve
        let duration: TimeInterval = 0.6
        UIView.transition(with: self.window!, duration: duration, options: options, animations: {}, completion: nil)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...