使用 Core Data 时,是不是保留非托管对象类及其托管对象版本

Posted

技术标签:

【中文标题】使用 Core Data 时,是不是保留非托管对象类及其托管对象版本【英文标题】:When working with Core Data, do you keep a non managed object class, and a managed object version of it使用 Core Data 时,是否保留非托管对象类及其托管对象版本 【发布时间】:2015-08-19 22:22:19 【问题描述】:

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

我学会使用核心数据的方式是使用 xCode 提供的托管对象模型创建模型类,然后每当您创建或销毁这些类的实例时,您将它们视为托管对象,而不是普通类型的大多数其他类创建的对象实例。这总是让我觉得有些复杂和困难,因为每当您需要更改托管对象时,您都需要通过托管对象上下文来完成,这在一天结束时只是一个数据库。

对不起,如果问题令人困惑,如果您需要澄清,我非常乐意,我觉得讨论 Core Data 有点困难。

【问题讨论】:

【参考方案1】:

我有 an app,它非常依赖 Core Data。

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

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

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

如果您真的想拥有非托管数据模型,我的建议是根本不要使用 Core Data。像 Gus Mueller 的 FMDB 或 Marco Arment 的 FCModel。

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

您可以阅读Core Data Programming Guide,但我个人在第一次了解它时并没有太多运气。不过,一本好的 Core Data 书可能也不错;当我第一次学习它时,我阅读了Core Data for ios,发现它很有帮助。

【讨论】:

谢谢,这正是我正在寻找的答案

以上是关于使用 Core Data 时,是不是保留非托管对象类及其托管对象版本的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中执行子获取时,在父上下文中修改托管对象是不是会向下传播到子上下文?

Core Data 3 托管对象上下文

在 Core Data 中更改托管对象模型的属性值时崩溃

在 Core Data 中插入一个新的托管对象

Core Data 在 fetchObjects 中保留两个对象而不是 27 个

Core Data 托管对象上下文线程同步