gpt4 book ai didi

ios - CoreData - NSManagedObject 子类的好处

转载 作者:可可西里 更新时间:2023-10-31 23:54:47 24 4
gpt4 key购买 nike

我试图在不创建 NSManagedObject 的子类的情况下插入 CoreData。但是我的应用程序因 NSManagedObject setValue:forUndefinedKey "name"in Category 而崩溃。

    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()

子类化 NSManagedObjects 有什么好处

最佳答案

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

  • 您需要在您的 NSManagedObject 上使用便捷方法
  • 您正在使用根本不在模型中的 transient 值
  • 想要对 NSManagedObject 的创建或插入作出 react
  • 想要向您的 UI 开发人员展示更易于使用的对象
  • 希望在访问属性时避免使用“魔术字符串”

而且我确信该列表中还有更多。

您永远不需要子类化 NSManagedObject,但在许多情况下,它确实可以让您的代码更简洁、更易于维护。

对您的代码的一些评论:

  • NSEntityDescriptionNSManagedObject 不应以这种方式创建。您应该使用便捷方法 NSEntityDescription.insertNewObjectForEntityForName(_:)
  • 使用这样的强制尝试对于错误处理来说是非常糟糕的。你 FAR 最好使用 do/catch 以便你可以完全询问错误。这对于会向您发送子错误的 Core Data 尤其重要。
  • 通过 AppDelegate 访问 NSManagedObjectContext 是一个糟糕的设计(是的,我知道它在 Apple 模板中)。如 Core Data Programming Guide 中所述,使用依赖注入(inject)要好得多。并避免访问 AppDelegate
  • 时固有的紧密耦合

关于ios - CoreData - NSManagedObject 子类的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com