Попытка представить <UIAlertController>, чей вид не входит в иерархию окон - PullRequest
0 голосов
/ 16 июня 2020

Я пытался представить UIAlertController, когда пользователь ввел неправильный пароль для своей учетной записи, UIAlertController находится в одном отдельном файле внутри группы Model, которую я расширяю класс UIViewController, чтобы добавить к нему эту функцию предупреждения. У меня также есть еще один файл внутри моей модельной группы, а именно LogIn, в который я написал все logi c, стоящие за процессом входа в систему, чтобы я мог вызвать его в свой LogInV C. Однако у меня возникла ошибка «Попытка представить, чье представление не входит в иерархию окон!» всякий раз, когда функция получает вызов внутри моего LogInV C. Я пытаюсь сделать свой проект в MVC, и я знаю, что вызвало эту ошибку, но просто не знаю, как ее исправить. Может ли кто-нибудь сказать мне, как решить эту проблему?

Предупреждение

import Foundation
import UIKit

extension UIViewController {

    //MARK: - Not Enough Information Alert
    func notEnoughInfo(title: String, message: String) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let OKAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        alertController.addAction(OKAction)
        self.present(alertController, animated: true, completion: nil)
    }

    //MARK: - Incorrect Username and Password
    func wrongInfo(title: String, message: String) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let OKAction = UIAlertAction(title: "Try again", style: .default, handler: nil)
        alertController.addAction(OKAction)
        self.present(alertController, animated: true, completion: nil)
    }


Вход

import Foundation
import Firebase

class LogIn: UIViewController{

    let db = Firestore.firestore()

    //MARK: - userValidation()
    func userValidation(Username:String, Password:String){

        db.collection("users").getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                if let snapShotDocument = querySnapshot?.documents {
                    for doc in snapShotDocument {
                        let data = doc.data()
                            if let username = data[C.username] as? String, let password = data[C.password] as? String {
                                if Username == username, Password == password {
                                    print("Log in Successfully")
                                }
                                else {
                                    self.wrongInfo(title: "Incorrect password", message: "Try again please")
                                }
                            }
                    }
                }
            }
        }
    }
}

Вход в систему C

import UIKit
import Firebase

class LogInVC: UIViewController {


    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!
    @IBOutlet weak var logInBtn: UIButton!
    let db = Firestore.firestore()
    let logIn = LogIn()

    override func viewDidLoad() {
        super.viewDidLoad()
        //logInBtn.layer.cornerRadius = logInBtn.frame.height/5
    }

    @IBAction func logInBtn(_ sender: UIButton) {
        if let username = emailTextField.text, let password = passwordTextField.text{
            if username.isEmpty || password.isEmpty{
                notEnoughInfo(title: "Not enough information", message: "Please fill in all the necessary information.")
            }else{
                logIn.userValidation(Username: username, Password: password) //here is where problem occured
                //move to another viewcontroller
            }
        }
    }

    @IBAction func signUpBtn(_ sender: UIButton) {
        let push = storyboard?.instantiateViewController(withIdentifier: C.signUpVC) as! SignUpVC
        push.modalPresentationStyle = .fullScreen
        present(push, animated: true, completion: nil)
    }

} //ends of class

1 Ответ

0 голосов
/ 16 июня 2020

Вам нужно сначала закрыть текущее текущее предупреждение или текущий контроллер. в настоящее время вы пытаетесь представить контроллер над контроллером, поэтому он показывает эту ошибку. Не представляй. удалите эту строку из self.wrongInfo (заголовок: «Неверный пароль», сообщение: «Попробуйте еще раз, пожалуйста») из LogIn .

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

...