Swift 项目因 NSException 类型的未捕获异常而终止

Swift Project Terminating with uncaught exception of type NSException

Unrecognized selector sent to instance 0x7feca9469620 2016-05-10 19:34:58.781 TribeA2[76123:4834825] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TribeA2.RegisterPageViewController registerButtonTapped:]: unrecognized selector sent to instance 0x7feca9469620'

终止并出现 NSException.

类型的未捕获异常
import UIKit

class RegisterPageViewController: UIViewController {



@IBOutlet weak var userFirstNameTextField: UITextField!
@IBOutlet weak var userLastNameTextField: UITextField!
@IBOutlet weak var userEmailTextField: UITextField!
@IBOutlet weak var userPasswordTextField: UITextField!


var databasePath = NSString()

override func viewDidLoad() {
    super.viewDidLoad()
    let filemgr = NSFileManager.defaultManager()
    let dirPaths =
        NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
                                            .UserDomainMask, true)

    let docsDir = dirPaths[0]

    databasePath = (docsDir as NSString).stringByAppendingPathComponent(
        "users.db")

    if !filemgr.fileExistsAtPath(databasePath as String) {

        let userDB = PersonDatabase(path: databasePath as String)

        if userDB == nil {
            print("Error: \(userDB.lastErrorMessage())")
        }

        if userDB.open() {
            let sql_stmt = "CREATE TABLE IF NOT EXISTS USERS (ID INTEGER PRIMARY KEY AUTOINCREMENT, FNAME TEXT, LNAME TEXT, EMAIL TEXT, PASSWORD TEXT)"
            if !userDB.executeStatements(sql_stmt) {
                print("Error: \(userDB.lastErrorMessage())")
            }
            userDB.close()
        } else {
            print("Error: \(userDB.lastErrorMessage())")
        }
    }


}


@IBAction func saveData(sender: AnyObject) {
    let userDB = PersonDatabase(path: databasePath as String)

    if userDB.open() {

        func displayMyAlertMessage(userMessage:String)
        {
            let myAlert = UIAlertController(title:"Alert", message:
                userMessage, preferredStyle:
                UIAlertControllerStyle.Alert);

            let okAction = UIAlertAction(title:"Ok", style:
                UIAlertActionStyle.Default, handler:nil)

            myAlert.addAction(okAction)

            self.presentViewController(myAlert, animated:true,
                                       completion:nil)

        }


        let insertSQL = "INSERT INTO USERS (fname, lname, email, password) VALUES ('\(userFirstNameTextField.text)', '\(userLastNameTextField.text)' '\(userEmailTextField.text)', '\(userPasswordTextField.text)')"

        let result = userDB.executeUpdate(insertSQL, withArgumentsInArray: nil)

        if !result {
            displayMyAlertMessage("All fields are required")
            print("Error: \(userDB.lastErrorMessage())")
            return
        } else {
           displayMyAlertMessage("Thank you for registering \(userFirstNameTextField.text)")
    }
}

RegisterPageViewController 中你创建了 registerButtonTapped 按钮动作,但是按钮方法没有实现,如果你没有使用 registerButtonTapped 从属性检查器中删除,否则会实现按钮动作在 class 上像下面这样

func registerButtonTapped(sender: UIButton)
    {
   }

在界面生成器中,如果您右键单击该按钮,将显示一个弹出窗口,您可以在其中看到您已 "action" 以名称 -registerButtonTapped: 连接到您的 class ,但实际上你还没有实现那个方法(或者你出于某种原因删除了它)。因此,您必须通过单击该弹出窗口中的 x 按钮来删除该连接,或者实施 -registerButtonTapped: 方法。

如果您右键单击该按钮,该按钮将显示 associated.please 的操作或变量,请检查它是否在您的控制器中可用