我正在开发一个具有 LoginViewController 和 HomeViewController 的应用程序。我只想在登录成功后才转到 HomeViewController。我已经阅读过有关以编程方式使用 segue 而不是将其连接到 Storyboard的内容,但我有一个问题希望你能帮助我解决,我是 swift 的新手。
此代码工作正常,只是当用户输入正确的用户电子邮件和密码时,它会崩溃并显示由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“接收器 LoginViewController 没有标识符为“testSeg”的 segue”
我知道我还没有定义“testSeg”,但我不知道在哪里定义。如果我从 Storyboard连接 Segue,即使登录详细信息不正确,即使我从身份检查器给它一个标识符,它也会转到主页。请帮助检查我下面的 LoginViewController 代码
//这是我的登录代码,不确定是否应该添加prepareForSegue或如何解决
import UIKit
import Firebase
class LoginViewController: UIViewController {
let nextViewController = HomeViewController()
@IBOutlet weak var loginLbl: UILabel!
@IBOutlet weak var usernameTxt: UITextField!
@IBOutlet weak var passTxt: UITextField!
var pass = true
@IBAction func userLoginBtn(_ sender: Any) {
let username = usernameTxt.text!
let password = passTxt.text!
if username.isEmpty || password.isEmpty {
var emptyFieldsError:UIAlertView = UIAlertView(title: "Please try again", message: "Please fill in all the fields we can get you logged in to your account.", delegate: self, cancelButtonTitle: "Try again")
emptyFieldsError.show()
}
Auth.auth().signIn(withEmail: username, password: password) { (user, error) in
if user != nil {
// self.performSegueWithIdentifier("Klikur", sender: self)
OperationQueue.main.addOperation {
[weak self] in
print("ERROR STARTS HERE")
print(error)
self?.loginLbl.text = "YEAAAAY DID IT"
self?.performSegue(withIdentifier: "testSeg", sender: self)
}
} else {
if let errorString = (error! as NSError).userInfo["error"] as? String {
// errorMessage = errorString
self.loginLbl.text = "error"
}
self.loginLbl.text = "Please try again"
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
我想通过代码定义segue,并且仅在正确输入登录详细信息的情况下才转换到主页。 PS:我为此使用 Firebase 身份验证,并且代码工作正常,只是导致崩溃的 segue 部分。预先感谢您。
最佳答案
您的代码是正确的。您的 Storyboard可能不正确。您需要从 View Controller 对象而不是“登录”按钮创建segue,以便用户点击按钮后不会立即触发它。 – 致谢:@Paulw11
关于ios - 我的应用程序由于未捕获的异常 'NSInvalidArgumentException' 而终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675537/