核心数据实际上不是对象持久性框架。它
是
一个对象图形管理框架,恰好能够将该图形持久化到磁盘上(请参见
this
上一页,请回答以获取更多信息)。所以尝试使用核心数据来保持
一些
对象图中的对象将对纹理进行处理。核心数据更愿意管理您要创建的所有对象的整个图形。所以,这些选择并不完美,但我看到了几个(包括你提到的一些):
-
您可以在核心数据上下文中创建所有对象,然后删除不想保存的对象。在保存上下文之前,所有内容都在内存中,这样就不会像您建议的那样“返回数据库”。即使在保存到磁盘之后,核心数据也非常擅长在上下文的行缓存中缓存实例,而且只让它做自己的事情而不担心磁盘上的内容和内存中的内容的开销非常小。
-
如果可以先创建所有对象,然后在决定要保存哪些对象之前在内存中进行所有处理,则可以使用只有内存中持久存储的持久存储协调器创建一个NSManagedObjectContext。当决定要保存哪些对象时,可以将持久性(xml/binary/sqlite)存储添加到持久性存储协调器,将要保存的对象分配给该存储(使用上下文的
(void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store
)然后保存上下文。
-
可以在核心数据之外创建所有对象,然后将要保存的对象复制到核心数据上下文中。
-
您可以在一个内存中的上下文中创建所有对象,并编写自己的方法将这些对象的属性和关系复制到一个新的上下文中,以仅保存所需的实例。除非模型中的实体有许多关系,否则这并不难(请参见
this
第页,获取有关使用多通道方法将对象从一个存储迁移到另一个存储的提示;它描述了管理对象模型版本化上下文中的技术,在10.5中不再需要该技术,但该技术也适用于您的用例。
就个人而言,我将使用选项1——让核心数据完成它的工作,包括管理从对象图中删除的内容。