创建一个核心日期实体实例但不希望它被存储(非持久性)

Posted

技术标签:

【中文标题】创建一个核心日期实体实例但不希望它被存储(非持久性)【英文标题】:Create a Core Date Entity Instance But not want it to be stored(non-persistent) 【发布时间】:2010-09-20 12:11:54 【问题描述】:

有时我需要实例化 CoreDateEntity 来存储一些临时使用的信息。 但我不需要将它存储到数据库中。

目前我创建了一个与 CoreDateEntity 具有相同结构的类似类。 它运作良好,但我必须在两个模型之间进行许多数据传输。

有没有更好的方法来处理这个问题?


感谢所有回复。但你们只给我一半的答案。考虑到这一点,我需要将一些没有 MOC 的实体放入当前数据库池中,我该怎么做?我已经检查了 CoreData 的文档,似乎我没有找到将一个实体从 MOC 转移到另一个 MOC(管理对象上下文)的 API。

【问题讨论】:

感谢所有回复。 b 【参考方案1】:

根据 Apple 文档,如果将 nil 指定为上下文,则可以在没有上下文的情况下初始化托管对象。

- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context

【讨论】:

好提示。但是如果我需要稍后将实例插入数据库池怎么办?我该怎么办? 如果您稍后想使用特定上下文注册对象,您只需调用 [context insertObject:managedObject]。这实际上与 initWithEntity 调用的方法相同......如果上下文不是 nil。【参考方案2】:

您可以在设置数据模型时将实体分配给不同的商店。让一个存储成为持久存储,另一个存储在内存中。您无法跨商店建立关系,但听起来您不需要那样。

要分配配置,请点击实体详细信息中的配置选项卡(带有扳手图标的选项卡)(您可以在其中为其指定名称、类和父级)。创建持久存储时,将配置名称添加到选项字典。


更新:

我认为你可能把事情复杂化了。听起来您有一些托管对象将是临时的,而一些托管对象将持续存在,但有时您可能希望保存临时对象。我认为您不应该费心尝试分离出“临时”对象。这样做只会增加复杂性,而不会带来任何性能优势。相反,只需使用普通的持久对象,然后删除不需要的对象。

始终先尝试最简单的解决方案。

【讨论】:

但是我怎样才能将某个实体的 MOC 转移到另一个实体,以便将其存储在持久存储中? 您无法持久化分配给内存存储的实体。您必须将其克隆到分配给持久存储的实体。我不太清楚你想做什么。【参考方案3】:

使用两个不同的托管对象上下文,并且只保存一个上下文中的对象。注意不要在两个不同上下文的对象之间设置关系 - 这不起作用。

【讨论】:

以上是关于创建一个核心日期实体实例但不希望它被存储(非持久性)的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 如何初始化对象但不将其添加到持久存储?

具有全局持久存储的基于核心数据文档的应用程序

具有核心数据的多个持久性存储

一个实体可以有一个项目列表/数组(核心日期,XCode)

如何使用 managedObjectContext 来使用实体?

根据日期添加核心数据属性