首页 > 解决方案 > 我的应用程序因未捕获的异常“NSInvalidArgumentException”而终止

问题描述

我正在开发一个具有 LoginViewController 和 HomeViewController 的应用程序。只有成功登录后,我才想去 HomeViewController。我已经阅读了有关以编程方式使用 segue 而不是将其连接到情节提要的信息,但我有一个问题希望您能帮助我解决,我是 swift 新手。

此代码完美运行,除了当用户输入正确的用户电子邮件和密码时它崩溃并说由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“接收者 LoginViewController 没有标识符为“testSeg”的segue”

我知道我还没有定义“testSeg”,但我不知道在哪里做。如果我从情节提要连接 segue,即使登录详细信息不正确,即使我从 Identity Inspector 给它一个标识符,它也会转到主页。请通过检查下面的 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 部分。先感谢您。

标签: iosswiftxcodefirebase

解决方案


你的代码是正确的。您的故事板可能不正确。您需要从视图控制器对象创建 segue,而不是“登录”按钮,以便用户点击按钮时不会触发它。- 致谢:@Paulw11


推荐阅读