закрытие приложения и повторное открытие, после чего PopToRootViewController не работает в быстрой пожарной базе - PullRequest
0 голосов
/ 15 января 2020

Я новичок в Swift. Я работаю над приложением. Я использую firebase для регистрации и входа пользователя в свое приложение. вот мой код входа в систему: -

@IBAction func onClickLogin(_ sender: Any)
{
    let email = Validation.shareValidator.isValidEmail(email: txtEmail.text, view: viewContainerEmail)
    let password = Validation.shareValidator.isValidPassword(password: txtPassword.text, view: viewContainerPassword)
    if email != "success"
    {
        CustomAlert.shareAlert.alertSetUp(title: "Email Field", subTitle: email, boldTitle: "Invalid Email")
    }
    else if password != "success"
    {
        CustomAlert.shareAlert.alertSetUp(title: "Password Field", subTitle: password, boldTitle: "Invalid Password")
    }
    else
    {
        Auth.auth().signIn(withEmail: txtEmail.text!, password: txtPassword.text!) { (result, error) in
            if error != nil
            {
                CustomAlert.shareAlert.alertSetUp(title: "Login Error", subTitle: error!.localizedDescription, boldTitle: "Login Error")
            }
            else
            {
                self.btnLogin.startAnimate(spinnerType: SpinnerType.circleStrokeSpin, spinnercolor: UIColor.white, spinnerSize: 20, complete: {
                    self.btnLogin.backgroundColor = UIColor.green

                    let defaults = UserDefaults.standard

                    defaults.set(true, forKey: "isLogin")
                    defaults.set(result?.user.uid, forKey: "uid")
                    defaults.set(self.txtEmail.text!, forKey: "email")
                    let vc = self.storyboard?.instantiateViewController(withIdentifier: "RootTabBarC") as! RootTabBarC
                    self.navigationController?.pushViewController(vc, animated: true)
                })
            }
        }

    }
}

вот мой код регистрации: -

@IBAction func onClickSignUp(_ sender: Any)
{
        Auth.auth().createUser(withEmail: txtEmail.text!, password: txtPassword.text!) { (result, error) in
            if error != nil
            {
                CustomAlert.shareAlert.alertSetUp(title: "Registration Error", subTitle: error!.localizedDescription, boldTitle: "Registration Error")
            }
            else
            {
                let uid = result?.user.uid
                let ref = Database.database().reference(withPath: "user").child(uid!)
                ref.setValue(["name" : self.txtName.text!, "email" : self.txtEmail.text!, "password" : self.txtPassword.text!, "mobile" : "", "recipeExpert" : "", "bio" : "", "profileImage" : ""])

                self.btnSignUp.startAnimate(spinnerType: SpinnerType.circleStrokeSpin, spinnercolor: UIColor.white, spinnerSize: 20, complete: {
                    self.btnSignUp.backgroundColor = UIColor.green

                    let defaults = UserDefaults.standard

                    defaults.set(true, forKey: "isLogin")
                    defaults.set(result?.user.uid, forKey: "uid")
                    defaults.set(self.txtEmail.text!, forKey: "email")
                    let vc = self.storyboard?.instantiateViewController(withIdentifier: "RootTabBarC") as! RootTabBarC
                    self.navigationController?.pushViewController(vc, animated: true)
                })
          }          
}

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

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

        UserDefaults.standard.removeObject(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 vc = storyboard?.instantiateViewController(identifier: "LoginSignUpVC") as? LoginSignUpVC
    let navVc = UINavigationController(rootViewController: vc!)
    appDel.window?.rootViewController = navVc
    appDel.window?.makeKeyAndVisible()

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

}

когда я я запускаю мое приложение, оно работает нормально, но когда я закрываю вкладку последних приложений моего приложения на симуляторе, снова открываю и пытаюсь выйти, но оно не возвращается к моему LoginSignUpV c root просмотр контроллера . существует проблема с self.parent? .navigationController? .popToRootViewController (animated: true)

любая помощь будет оценена, спасибо.

1 Ответ

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

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

let storyboard = UIStoryboard(name: "Authentication", bundle: Bundle.main)
        let viewController = storyboard.instantiateInitialViewController()

        if let viewController = viewController {
            self.present(viewController, animated: true, completion: nil)
        }

, вы можете проверить userDefaults в appDelegate и перекусить правильную раскадровку.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    // check your userdefaults and change this codes for loged in user
    let storyboard = UIStoryboard(name: "Authentication", bundle: nil)

    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC")
    //
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()

    return true
}

не забудьте установить идентификатор раскадровки для контроллера представления

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