CoreData - NSManagedObject子类的好处

Rah*_*iya 2 core-data ios swift

我试图插入到CoreData而不创建NSManagedObject的子类.但我的应用程序崩溃与NSManagedObject setValue:forUndefinedKey"名称"在类别中.

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    let entitiyDesc = NSEntityDescription()
    entitiyDesc.name = "Category"
    guard let data = model.data else { return }
    for d in data {
        let managedObject = NSManagedObject.init(entity: entitiyDesc, insertIntoManagedObjectContext: managedObjectContext)
        managedObject.setValue(d.name, forKey: "name")
    }
    try! managedObjectContext.save()
Run Code Online (Sandbox Code Playgroud)

子类化NSManagedObjects有什么好处

Mar*_*rra 14

使用Core Data的方式没有任何问题.通常,您在以下时间开始想要子类化:

  • 你想要方便的方法 NSManagedObject
  • 您正在使用模型中根本不存在的瞬态值
  • 想要对创建或插入做出反应 NSManagedObject
  • 想要向UI开发人员展示一个更易于使用的对象
  • 想要在访问属性时避免使用"魔术字符串"

我确信该列表中还有更多内容.

您永远不需要子类化,NSManagedObject但在许多情况下,它确实使您的代码更清晰,更易于维护.

您对代码的一些评论:

  • NSEntityDescription并且NSManagedObject不应该以这种方式创建.您应该使用的简便方法NSEntityDescription.insertNewObjectForEntityForName(_:),而不是
  • 使用这样的强制尝试对于错误处理非常糟糕.您是FAR关闭使用DO/catch语句,这样就可以完全询问错误更好.这对于向您发送子错误的核心数据尤为重要.
  • 访问NSManagedObjectContext通过AppDelegate这样的设计很差劲(是的,我知道它在苹果模板).如" 核心数据编程指南"中所讨论的那样,使用依赖注入要好得多,并避免访问时所固有的紧密耦合AppDelegate