Завершение проекта Swift с неисследованным исключением типа NSException

Нераспознанный селектор отправлен на экземпляр 0x7feca9469620 2016-05-10 19:34:58.781 TribeA2[76123:4834825] *** Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: '-[TribeA2.RegisterPageViewController registerButtonTapped selector:or =): к экземпляру 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 ответа

Решение

В RegisterPageViewController Вы были созданы registerButtonTapped действие кнопки, но метод кнопки не реализован, если вы не используете registerButtonTapped удалить из инспектора атрибутов, в противном случае, действие кнопки на классе, как показано ниже

func registerButtonTapped(sender: UIButton)
    {
   }

В конструкторе интерфейса, если вы щелкните правой кнопкой мыши по этой кнопке, появится всплывающее окно, где вы увидите, что у вас есть "действие", связанное с именем -registerButtonTapped: в вашем классе, но на самом деле вы не реализовали этот метод (или вы по какой-то причине удалили его). Таким образом, вы должны удалить это соединение, нажав на кнопку х в этом всплывающем окне либо реализовать -registerButtonTapped: метод.

Если вы щелкнете правой кнопкой мыши по кнопке, кнопка покажет действие или переменные, которые с ней связаны. Проверьте, доступно ли оно в вашем контроллере.

Другие вопросы по тегам