jcmax
@jcmax
Супер Пользователь

Как вывести ошибки и скрыть контроллер в swift?

Добрый день, вопрос профессионалам, помогите пожалуйста. Решил написать приложение, в нем есть стори борд с авторизацией где сложенно у меня все, авторизация, регистрация и восстановление.

Вся авторизация идет через Firebase.

Вообщем сама проблема

У меня есть два поля имя и пароль, а также кнопка входа - экшен у меня там привязанн вот такой код

@IBAction func checkLogin(_ sender: UIButton) {

        let email = userEmail.text!
        let passwd = userPassword.text!
        
        if email == "" || passwd == "" || !email.isValidEMail {
            userEmail.shake()
            userPassword.shake()
            return
        }

        Auth.auth().signIn(withEmail: email, password: passwd) { (user, error) in
            
            if error != nil {
                let alert = UIAlertController(title: "Ошибка!", message: (error?.localizedDescription)!, preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
                self.present(alert, animated: true, completion: nil)
            } else {
                // TODO: Save user data to Locksmith 
                
                if let user = user {
                    do {
                        try Locksmith.saveData(data: ["user_uid": user.uid], forUserAccount: "myUserAccount")
                    } catch (let err) {
                        print(err)
                    }
                }

                let alert = UIAlertController(title: "Вы авторизированны", message: "вы зашли как: \(user?.uid)", preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
                self.present(alert, animated: true, completion: nil)
                
            }
        }
        
        let userUID = Auth.auth().currentUser?.uid
        
        print("\(userUID)")
        
        if userUID != nil {
            self.navigationController?.popViewController(animated: true)
            self.dismiss(animated: true, completion: nil)
        }
    }


проблема в том, что сам кложер выводит авторизацию в отдельный поток, а главный поток идет дальше. и я не могу вывести ошибки. точней UIAlert'ы вывести можно если запилить их в самом условии. Вопрос как скрыть контроллер, если пользователь авторизировался удачно, потому, что главный поток выполняется быстрее чем проходит авторизация??

PS! не пинайте я нуб в swift'e
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexkbs
@alexkbs
Если у вас это первый вид, то вы не можете его вот так просто скрыть. Перед ним (под ним) что должен увидеть пользователь? Нужно показать другой контроллер или сделать segue.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы