每次在嵌套条件下弹出 AlertController swift ios

AlertController is being popped every time in nested conditions swift ios

我已经定义了一个警报控制器,当用户名或密码不正确时应该弹出警报,并且它工作正常。但是当用户名和密码匹配时,尽管每次登录时它都会弹出。我想我没有以正确的方式定义嵌套条件?帮我对多重嵌套条件进行排序。

登录密码

import UIKit
import CoreData
import Foundation

 class ViewController: UIViewController {

var usernameGlobal : String = ""

@IBOutlet weak var emailText: UITextField!
@IBOutlet weak var passText: UITextField!

@IBOutlet weak var loginButton: UIButton!
@IBAction func loginAction(_ sender: Any) {

    let appDel = UIApplication.shared.delegate as! AppDelegate
    let context = appDel.persistentContainer.viewContext

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
        request.returnsObjectsAsFaults = false
      //  request.predicate = NSPredicate(format: "username = %@", "" + emailText.text!)


    do {

    let results = try! context.fetch(request)

        if(results.count > 0){

            for result in results as! [NSManagedObject]
            {


                if  emailText.text == result.value(forKey: "username") as? String && passText.text == result.value(forKey: "password") as? String {
                    print(emailText.text!, passText.text!)
                    usernameGlobal = self.emailText.text!
                    let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle : nil)
                    let desController = mainStoryBoard.instantiateViewController(withIdentifier: "AddViewController") as! AddViewController
                    let newFrontViewController = UINavigationController.init(rootViewController:desController)
                    revealViewController().pushFrontViewController(newFrontViewController, animated: true)

                }

                else {

                       let alertController = UIAlertController(title: "Oops!", message: "Incorrect username or password", preferredStyle: .alert)

                        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
                        alertController.addAction(defaultAction)

                        present(alertController, animated: true, completion: nil)
                    }

            }

            }
        }
    }



@IBAction func signupSegue(_ sender: Any) {

    let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle : nil)
    let desController = mainStoryBoard.instantiateViewController(withIdentifier: "SignupViewController") as! SignupViewController
    let newFrontViewController = UINavigationController.init(rootViewController:desController)
    revealViewController().pushFrontViewController(newFrontViewController, animated: true)

}


override func viewDidLoad() {
    super.viewDidLoad()

    loginButton.backgroundColor = UIColor.blue

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

如果您的结果包含多个不同的元素,则 else 块将执行多次。这就是警报多次出现的原因。当您找到匹配项时,您应该 return 。如果未找到匹配项,则在循环后会出现一次警报。

使用这个:

       @IBAction func loginAction(_ sender: Any) {

            let appDel = UIApplication.shared.delegate as! AppDelegate
            let context = appDel.persistentContainer.viewContext

            let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
            request.returnsObjectsAsFaults = false
            //  request.predicate = NSPredicate(format: "username = %@", "" + emailText.text!)


            do {

                let results = try! context.fetch(request)

                if(results.count > 0){

                    for result in results as! [NSManagedObject]
                    {


                        if  emailText.text == result.value(forKey: "username") as? String && passText.text == result.value(forKey: "password") as? String {
                            print(emailText.text!, passText.text!)
                            usernameGlobal = self.emailText.text!
                            let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle : nil)
                            let desController = mainStoryBoard.instantiateViewController(withIdentifier: "AddViewController") as! AddViewController
                            let newFrontViewController = UINavigationController.init(rootViewController:desController)
                            revealViewController().pushFrontViewController(newFrontViewController, animated: true)
                            return

                        }
                    }
                    let alertController = UIAlertController(title: "Oops!", message: "Incorrect username or password", preferredStyle: .alert)

                    let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
                    alertController.addAction(defaultAction)

                    present(alertController, animated: true, completion: nil)

                }
            }
        }

您可以使用此代码:

@IBAction func loginAction(_ sender: Any) {

        let appDel = UIApplication.shared.delegate as! AppDelegate
        let context = appDel.persistentContainer.viewContext
        let isMatched = false
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
        request.returnsObjectsAsFaults = false

         do {

            let results = try! context.fetch(request)

            if(results.count > 0){

                for result in results as! [NSManagedObject]
                {


                    if  emailText.text == result.value(forKey: "username") as? String && passText.text == result.value(forKey: "password") as? String {
                        print(emailText.text!, passText.text!)
                        usernameGlobal = self.emailText.text!
                        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle : nil)
                        let desController = mainStoryBoard.instantiateViewController(withIdentifier: "AddViewController") as! AddViewController
                        let newFrontViewController = UINavigationController.init(rootViewController:desController)
                        revealViewController().pushFrontViewController(newFrontViewController, animated: true)
                        isMatched = true
                        break

                    }

                }

                if !isMatched {

                      let alertController = UIAlertController(title: "Oops!", message: "Incorrect username or password", preferredStyle: .alert)
                      let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
                      alertController.addAction(defaultAction)

                      present(alertController, animated: true, completion: nil)
                 }

            }
        }
    }

变化:

你加

        let isMatched = false

您在 if 条件中添加 break 语句。这样,一旦用户名和密码匹配,它就会打破循环。然后在 for 循环之后检查 isMatched 是否为假,然后显示结果。