我的应用由于未捕获的异常'NSInvalidArgumentException'

时间:2019-06-19 20:41:12

标签: ios swift xcode firebase

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

此代码可以正常工作,除了当用户输入正确的用户电子邮件和密码时,由于未捕获的异常“ NSInvalidArgumentException”而崩溃并显示终止应用程序,原因是:“ Receiver 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身份验证,并且代码正常运行,只是导致崩溃的安全部分。预先谢谢你。

2 个答案:

答案 0 :(得分:0)

您的代码正确。您的情节提要可能不正确。您需要从视图控制器对象而不是“登录”按钮创建序列,以便用户单击该按钮后不会立即触发该序列。 –致谢:@ Paulw11

答案 1 :(得分:0)

您的代码是正确的,但是您可能忘记了为自己的序列创建标识符,为解决此问题,您应该将当前视图控制器的表单创建到另一个视图控制器,并为您提供一个名称,如下所示。 / p>

enter image description here