我正在编写Coredata基于文档的应用程序(即CoreData + NSPersistentDocument):当我创建一个新文档时,会初始化一个新的coredata堆栈,其中包含一个模型和一个托管上下文。
在用户保存文档之前,我需要做的是: - 创建一个新的上下文 - 在其中创建许多新的托管对象 - 合并两个上下文。
我在新的上下文中发出了save,但它引发了异常“这个NSPersistentStoreCoordinator没有持久存储。它无法执行保存操作。”。
我该怎么办? 我应该在此操作之前保存文档吗?
顺便说一句,如果我保存文档,创建新上下文,导入数据并保存新上下文并最终保存文档上下文,我收到以下消息:“此文档的文件已被其他应用程序更改,因为您打开或保存它。“;任何想法?
祝你好运!
答案 0 :(得分:0)
根本问题是NSPersistentDocument
执行原子保存,将文档NSManagedObjectConext
保存到临时文件中,然后将该文件与文档URL处的文件原子交换(如果存在) 。此交换的时间不公开,使得NSPersistentDocument
子类几乎不可能在保存操作期间知道(临时)持久性存储的URL。我相信您唯一的选择是覆盖-[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:]
,这样您就可以在创建持久存储后保存新的上下文。
作为参考,我已在{rdar:// 6510616下的Apple提交了此错误(请随意复制以投票修改)。