PopToRootViewController не работает после закрытия последней вкладки приложения - PullRequest
1 голос
/ 16 января 2020

Я работаю над приложением, и его функция выхода из системы не работает должным образом. вот изображение storyborad

вот второе изображение

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

вот мой код выхода из системы

@IBAction func onClickLogOut(_ sender: Any)
{
    do
    {
        try Auth.auth().signOut()

        UserDefaults.standard.set(false, forKey: "isLogin")
        UserDefaults.standard.removeObject(forKey: "uid")
        UserDefaults.standard.removeObject(forKey: "email")
        UserDefaults.standard.synchronize()

    }
    catch let err
    {
        print(err.localizedDescription)
    }

    let appDel = UIApplication.shared.delegate as! AppDelegate
    let st = UIStoryboard(name: "Main", bundle: Bundle.main)
    let vc = st.instantiateViewController(identifier: "LoginSignUpVC") as? LoginSignUpVC
    let navVc = UINavigationController(rootViewController: vc!)
    appDel.window?.rootViewController = navVc
    appDel.window?.makeKeyAndVisible()

    self.parent?.navigationController?.popToRootViewController(animated: true)


}

Ответы [ 3 ]

0 голосов
/ 16 января 2020
let appDel = UIApplication.shared.delegate as! AppDelegate
    let st = UIStoryboard(name: "Main", bundle: Bundle.main)
    let vc = st.instantiateViewController(identifier: "LoginSignUpVC") as? LoginSignUpVC
    let navVc = UINavigationController(rootViewController: vc!)
    appDel.window?.rootViewController = navVc
    appDel.window?.makeKeyAndVisible()

В приведенном выше фрагменте кода вы создаете новый экземпляр LoginSignUpV C и контроллер навигации, и вы устанавливаете этот экземпляр как root контроллер представления, который освобождает ранее установленный root просмотр контроллера. Следовательно, popToRootViewController не требуется.

0 голосов
/ 16 января 2020

Почему вы делаете popToRootViewController после установки контроллера rootview на LoginSignUpVC?

Это не требуется, потому что вы уже устанавливаете rootviewcontroller на LoginSignUpVC.

Просто удалите строку popToRootViewController из своего кода.

@IBAction func onClickLogOut(_ sender: Any) {

    do {
        try Auth.auth().signOut()

        UserDefaults.standard.set(false, forKey: "isLogin")
        UserDefaults.standard.removeObject(forKey: "uid")
        UserDefaults.standard.removeObject(forKey: "email")
        UserDefaults.standard.synchronize()
    }
    catch let err {
        print(err.localizedDescription)
    }

    let appDel = UIApplication.shared.delegate as! AppDelegate
    let st = UIStoryboard(name: "Main", bundle: Bundle.main)
    let vc = st.instantiateViewController(identifier: "LoginSignUpVC") as? LoginSignUpVC
    let navVc = UINavigationController(rootViewController: vc!)
    appDel.window?.rootViewController = navVc
}

Надеюсь, это сработает для вас !!

0 голосов
/ 16 января 2020

Я не уверен, что вы имеете в виду под close its recent tab?

Вы уверены, что событие связано с вашей кнопкой выхода на вашей странице представления?

Я не думаю window.makeKeyAndVisible и navigationController.popToRootViewController необходимо вызвать здесь. Я бы написал логи перенаправления c следующим образом:

@IBAction func onClickLogOut(_ sender: Any)
{
    do
    {
        try Auth.auth().signOut()

        UserDefaults.standard.set(false, forKey: "isLogin")
        UserDefaults.standard.removeObject(forKey: "uid")
        UserDefaults.standard.removeObject(forKey: "email")
        UserDefaults.standard.synchronize()

    }
    catch let err
    {
        print(err.localizedDescription)
    }

    guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginSignUpVC") as? LoginSignUpVC else {
        print("Error: VC not found")
        return
    }

    UIApplication.shared.keyWindow?.rootViewController = vc


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...