Мой код выглядит следующим образом:
@IBAction func clicked(_ sender: Any) {
let ref = Database.database().reference()
let pass = password.text
var firpass = ""
var bool = false;
ref.child(name.text as! String).child("password").observeSingleEvent(of: .value, with: { dataSnapshot in
firpass = dataSnapshot.value as? String ?? ""
if firpass == pass {
bool = true
}
if bool {
self.sendname = self.name.text!
let vc = DatabaseTableViewController(nibName: "DatabaseTableViewController", bundle: nil)
vc.finalName = self.sendname
self.navigationController?.pushViewController(vc, animated: true)
self.performSegue(withIdentifier: "username", sender: self)
} else {
let alert = UIAlertController(title: "Error", message: "Incorrect username or password", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
self.performSegue(withIdentifier: "failed", sender: self)
}
})
}
override func shouldPerformSegue(withIdentifier identifier: String?, sender: Any?) -> Bool {
if let ident = identifier {
if ident == "failed" {
return false
}
}
return true
}
Когда я даю правильное имя пользователя и пароль, я go перехожу на следующую страницу, но я получаю эту ошибку:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<OCRApp.ViewController: 0x105e00f60>) has no segue with identifier 'failed''
*** First throw call stack:
(0x1877aaa48 0x1874d1fa4 0x18b206010 0x104a5b58c 0x104a5ba20 0x104aaa19c 0x104aaa598 0x104a8bb40 0x105cd97fc 0x105cdabd8 0x105ce8c34 0x1877285e4 0x1877235d8 0x187722adc 0x1916a8328 0x18b81dae0 0x104a6cdb0 0x1875ac360)
libc++abi.dylib: terminating with uncaught exception of type NSException
Когда я ввел неправильное имя пользователя / пароль, я все же перешел на следующую страницу, и я получил вышеупомянутую ошибку, но с идентификатором failed
; когда я вынул строку self.performSegue(withIdentifier: "failed", sender: self)
, я все же перешел на следующую страницу и получил сообщение:
Warning: Attempt to present <UIAlertController: 0x102978a00> on <OCRApp.ViewController: 0x10170a650> which is already presenting <OCRApp.DatabaseTableViewController: 0x10206beb0>
Что я хочу, чтобы перейти на следующую страницу без ошибок, если вы поставили правильную аутентификацию, и получить только предупреждение и остаться на текущей странице, если вы даете неправильную аутентификацию. Как мне это сделать?