AlertController每次在swift ios嵌套条件下被popup

当用户名或密码不正确时,我已经定义了alertcontroller警报应该popup,它工作正常。 但是当用户名和密码匹配,尽pipe匹配每次login时popup。我想我没有正确的方式定义嵌套的条件? 帮助我sorting多个嵌套的条件。

代码login

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. } } 

你可以使用这个代码:

 @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语句。 这样,一旦用户名和密码匹配,它就会中断循环。 然后在循环之后检查isMatched是否为false,然后显示结果。

如果你的结果包含多个不同的元素,那么其他块将执行多个时间。 这就是为什么警报出现多次。 当你find一场比赛,那么你应该回来。 如果没有find匹配,则循环提示将出现一次。

用这个:

  @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) } } } 
Interesting Posts