AppDelegate 问题
AppDelegate issues
我正在 Swift 上进行我的第一个项目。我是 iOS 本身的新手。
我使用故事板创建各种屏幕,如注册、登录等。
注册屏幕是 link 从登录屏幕编辑的。但是,只要我在登录屏幕中点击 'Register' link,应用程序就会崩溃。
我没有在默认视图控制器中定义任何东西。但是,我在定义 App Delegate 的地方创建了注册用户视图控制器。
下面是我注册用户视图控制器的代码:
class RegisterUserViewController: UIViewController {
@IBOutlet weak var FFName: UITextField!
@IBOutlet weak var FEmail: UITextField!
@IBOutlet weak var FPassword: UITextField!
@IBOutlet weak var FAge: UITextField!
@IBOutlet weak var FGender: UITextField!
@IBOutlet weak var FLocation: UITextField!
@IBAction func registerUser(sender: UIButton) {
//define an app delegate
//define a managed context
//define an entity description
//perform entity operation like add, delete, search
//save the context
var appDel = UIApplication.sharedApplication().delegate as AppDelegate
var context:NSManagedObjectContext = appDel.managedObjectContext!
var newUsr = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObjectContext
newUsr.setValue("myusername", forKey: "username")
newUsr.setValue(FFName, forKey: "fullname")
newUsr.setValue(FEmail.text, forKey: "email")
newUsr.setValue(FPassword.text, forKey: "password")
newUsr.setValue(FAge, forKey: "age")
newUsr.setValue(FGender, forKey: "gender")
newUsr.setValue(FLocation, forKey: "location")
context.save(nil)
println(FFName.text)
println(FEmail.text)
}
您能否建议这是否是使用 App Delegates 的正确方式,或者我是否需要在 AppDelegate.swift 中定义任何内容?
感谢任何信息。
谢谢
请删除注册按钮,然后重新添加注册按钮。可能是之前声明的操作在那里,之后您更改了函数名称,因此产生了这种崩溃。
解决方案
- 右键单击按钮,查看已经绑定的操作方法,如果有不需要的方法,则将其删除。
- 删除按钮并再次添加新按钮和绑定操作方法
注意:一般建议
您正在从 ViewController 引用 AppDelegate 以获取上下文。
这可行,但创建了 VC 对 appDelegate 的依赖...不是最好的事情 :D
两种选择:
- 给视图控制器一个 var ctx 并将它从 appDelegate 传递给它
- 创建一个具有 CD 堆栈的 DataStoreManager class。 (这将此代码移出 appDelegate,这是理想的恕我直言 - 设置 CD 堆栈并不真正属于控制器)
最后:这也归结为个人喜好
我正在 Swift 上进行我的第一个项目。我是 iOS 本身的新手。
我使用故事板创建各种屏幕,如注册、登录等。 注册屏幕是 link 从登录屏幕编辑的。但是,只要我在登录屏幕中点击 'Register' link,应用程序就会崩溃。
我没有在默认视图控制器中定义任何东西。但是,我在定义 App Delegate 的地方创建了注册用户视图控制器。 下面是我注册用户视图控制器的代码:
class RegisterUserViewController: UIViewController {
@IBOutlet weak var FFName: UITextField!
@IBOutlet weak var FEmail: UITextField!
@IBOutlet weak var FPassword: UITextField!
@IBOutlet weak var FAge: UITextField!
@IBOutlet weak var FGender: UITextField!
@IBOutlet weak var FLocation: UITextField!
@IBAction func registerUser(sender: UIButton) {
//define an app delegate
//define a managed context
//define an entity description
//perform entity operation like add, delete, search
//save the context
var appDel = UIApplication.sharedApplication().delegate as AppDelegate
var context:NSManagedObjectContext = appDel.managedObjectContext!
var newUsr = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObjectContext
newUsr.setValue("myusername", forKey: "username")
newUsr.setValue(FFName, forKey: "fullname")
newUsr.setValue(FEmail.text, forKey: "email")
newUsr.setValue(FPassword.text, forKey: "password")
newUsr.setValue(FAge, forKey: "age")
newUsr.setValue(FGender, forKey: "gender")
newUsr.setValue(FLocation, forKey: "location")
context.save(nil)
println(FFName.text)
println(FEmail.text)
}
您能否建议这是否是使用 App Delegates 的正确方式,或者我是否需要在 AppDelegate.swift 中定义任何内容?
感谢任何信息。
谢谢
请删除注册按钮,然后重新添加注册按钮。可能是之前声明的操作在那里,之后您更改了函数名称,因此产生了这种崩溃。
解决方案
- 右键单击按钮,查看已经绑定的操作方法,如果有不需要的方法,则将其删除。
- 删除按钮并再次添加新按钮和绑定操作方法
注意:一般建议
您正在从 ViewController 引用 AppDelegate 以获取上下文。
这可行,但创建了 VC 对 appDelegate 的依赖...不是最好的事情 :D
两种选择: - 给视图控制器一个 var ctx 并将它从 appDelegate 传递给它 - 创建一个具有 CD 堆栈的 DataStoreManager class。 (这将此代码移出 appDelegate,这是理想的恕我直言 - 设置 CD 堆栈并不真正属于控制器)
最后:这也归结为个人喜好