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 的操作或变量,请检查它是否在您的控制器中可用
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 的操作或变量,请检查它是否在您的控制器中可用