Core data CoreData:保存文档前合并两个上下文

Core data CoreData:保存文档前合并两个上下文,core-data,Core Data,我正在编写基于Coredata文档的应用程序,即Coredata+NSPersistentDocument:当我创建一个新文档时,一个新的Coredata堆栈被初始化,带有一个模型和一个托管上下文 在用户保存文档之前,我需要做的是: -创建一个新的上下文 -在其中创建许多新的托管对象 -合并两个上下文 我在新上下文上发出save:on,但它引发了一个异常,即此NSPersistentStoreCoordinator没有持久存储。它无法执行保存操作 我该怎么办? 在此操作之前是否需要保存文档 顺便

我正在编写基于Coredata文档的应用程序,即Coredata+NSPersistentDocument:当我创建一个新文档时,一个新的Coredata堆栈被初始化,带有一个模型和一个托管上下文

在用户保存文档之前,我需要做的是: -创建一个新的上下文 -在其中创建许多新的托管对象 -合并两个上下文

我在新上下文上发出save:on,但它引发了一个异常,即此NSPersistentStoreCoordinator没有持久存储。它无法执行保存操作

我该怎么办? 在此操作之前是否需要保存文档

顺便说一下,如果我保存文档、创建新上下文、导入数据并保存新上下文,最后保存文档上下文,我会收到以下消息:此文档的文件在您打开或保存后已被其他应用程序更改。;有什么想法吗


致以最良好的祝愿

根本的问题是,NSPersistentDocument执行原子保存,将文档NSManagedObjectConext保存到临时文件中,然后该文件与文档URL处的文件(如果存在)进行原子交换。此交换的时间不是公开的,这使得NSPersistentDocument子类几乎不可能在保存操作期间知道临时持久存储的URL。我相信您唯一的选择是重写-[NSPersistentDocument writeToURL:of Type:forSaveOperation:originalContentsURL:error:]以便在创建持久存储后保存新上下文


作为参考,我已将此错误提交给rdar://6510616 请随意复制它以投票决定解决方案。

谢谢您的回答,巴里。我通过在文档初始化时添加内存中的持久存储进行管理,以便不同的NSManagedObjectContext成功保存;writeToURL:ofType:forSaveOperation:originalContentsURL:error:如果是第一次保存,我会将此存储迁移到sqlite存储。