使用 Core Data 时,您是否保留一个非托管对象 class,以及它的一个托管对象版本

When working with Core Data, do you keep a non managed object class, and a managed object version of it

我一直想知道在处理核心数据时是否有任何价值让模型 classes 不是托管对象?如果不是为了让这些对象持久化,处理核心数据存储的数据管理器 class 知道如何将 class(或 classes)的实例写入核心数据存储,并且当您的应用程序想要从持久性中调用这些实例时,数据存储有一个方法可以在没有托管对象上下文的情况下创建这些对象的实例?

我学习使用核心数据的方法是使用 xCode 提供给您的托管对象模型创建模型 classes,然后每当您创建或销毁这些 classes 您将它们视为托管对象,而不是大多数其他 classes 创建的普通类型的对象实例。这总是让我感到有些费解和困难,因为每当您需要更改托管对象时,您都需要通过托管对象上下文来完成,它最终只是一个数据库。

抱歉,如果问题令人困惑,如果您需要澄清,我非常乐意,但我发现讨论 Core Data 有点困难。

我有 an app 非常依赖核心数据。

不,我认为拥有模型对象的非托管版本没有任何价值。它只会增加复杂性(你有一堆额外的代码要写),并且会带走使用 Core Data 的一些好处(主要是对象的延迟加载)。

您确实可以通过托管对象上下文创建和销毁托管对象,但除此之外,托管对象的行为与非托管对象相同。例如,您可以更改托管对象的属性,而无需对托管对象上下文执行任何操作。

Core Data 并不是真正的数据库;它更像是一个 ORM (尽管 Apple 并没有这样称呼它)。这是一种将对象持久保存到持久存储并从中检索它们的方法,它所做的远不止将内容存储在数据库中。

如果您真的想要非托管数据模型,我的建议是根本不要使用 Core Data。类似于 Gus Mueller 的 FMDB or Marco Arment's FCModel

Core Data 的某些方面确实很难理解。但是一旦你弄明白了,它并没有那么糟糕,而且它使某些事情比仅仅使用数据库更容易很多

您可以阅读 Core Data Programming Guide, but I personally didn't have much luck with that when first learning about it. A good Core Data book would probably be good though; when I was first learning it, I read Core Data for iOS,发现它很有帮助。