创建一个核心日期实体实例但不希望它被存储(非持久性)
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】:使用两个不同的托管对象上下文,并且只保存一个上下文中的对象。注意不要在两个不同上下文的对象之间设置关系 - 这不起作用。
【讨论】:
以上是关于创建一个核心日期实体实例但不希望它被存储(非持久性)的主要内容,如果未能解决你的问题,请参考以下文章