Swift项目使用NSException类型的未捕获异常终止

时间:2016-05-10 09:54:28

标签: ios xcode swift nsexception

  

无法识别的选择器发送到实例0x7feca9469620 2016-05-10   19:34:58.781 TribeA2 [76123:4834825] ***终止app由于   未捕获的异常'NSInvalidArgumentException',原因:   ' - [TribeA2.RegisterPageViewController registerButtonTapped:]:   无法识别的选择器发送到实例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)")
    }
}

3 个答案:

答案 0 :(得分:2)

RegisterPageViewController中您创建了registerButtonTapped按钮操作,但未实现按钮方法,如果未使用registerButtonTapped从属性检查器中删除,则在类上实现按钮操作如下

func registerButtonTapped(sender: UIButton)
    {
   }

答案 1 :(得分:1)

在界面构建器中,如果右键单击该按钮,将显示一个弹出窗口,您可以在其中看到您的“行动”与名称-registerButtonTapped:连接到您的班级,但实际上您尚未实施那种方法(或者你因某种原因删除了它)。因此,您必须通过单击该弹出窗口中的x按钮删除该连接,或者实现-registerButtonTapped:方法。

答案 2 :(得分:0)

如果右键单击该按钮,该按钮将显示相关的操作或变量。请检查控制器中是否有该操作