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 堆栈并不真正属于控制器)

最后:这也归结为个人喜好