每次在嵌套条件下弹出 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 是否为假,然后显示结果。
我已经定义了一个警报控制器,当用户名或密码不正确时应该弹出警报,并且它工作正常。但是当用户名和密码匹配时,尽管每次登录时它都会弹出。我想我没有以正确的方式定义嵌套条件?帮我对多重嵌套条件进行排序。
登录密码
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 是否为假,然后显示结果。