Cocoa CoreData与autosave一起保存第一次,然后与";一起崩溃;NoSuchFileError“;在所有后续自动保存上

Cocoa CoreData与autosave一起保存第一次,然后与";一起崩溃;NoSuchFileError“;在所有后续自动保存上,cocoa,macos,core-data,nsdocument,Cocoa,Macos,Core Data,Nsdocument,使用CoreData的基于文档的应用程序。非常简单-两个实体,具有一对多关系。此应用程序与保存、加载等功能完美配合 然后我像这样打开了autosave: [[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1]; …然后马上就出了大问题 第一次自动保存工作正常,100%正确。i、 e.它将文件保存在用户的私有目录中,如果您退出应用程序并重新启动,自动保存的文档将自动重新打开。酷 但一旦您对数据进行第二次更改

使用CoreData的基于文档的应用程序。非常简单-两个实体,具有一对多关系。此应用程序与保存、加载等功能完美配合

然后我像这样打开了autosave:

[[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1];
…然后马上就出了大问题

第一次自动保存工作正常,100%正确。i、 e.它将文件保存在用户的私有目录中,如果您退出应用程序并重新启动,自动保存的文档将自动重新打开。酷

但一旦您对数据进行第二次更改,autosave就会崩溃,原因如下:

error = Error Domain=NSCocoaErrorDomain Code=134030 UserInfo=0x1001a1be0 "An error occurred while saving."
 Underlying Error=(Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x10019a840 "The file doesn’t exist."
 Underlying Error=(Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x100150d00 "The operation couldn’t be completed. No such file or directory"))
…这对我来说毫无意义。为什么“自动保存”会关心文件是否存在?为什么它会在第一次工作,然后在随后的时间失败


注意:我已经检查过了,苹果尝试在第二次自动保存调用中使用相同的文件名-如果第一次成功,为什么0.5秒后失败了???

为什么你要尝试每秒自动保存十次?这太频繁了。实际保存文件可能需要超过十分之一秒的时间。更合理的值是10秒,这可能比实际需要的频率更高。

从字里行间看,这似乎是苹果使用NSDocument实现核心数据的一个已知缺陷:autosave已损坏,他们不打算修复它

来自NSPersistentDocument(在项目创建时选择核心数据和NSDocument时使用的NSDocument的子类):

“保存到…”和“自动保存”不可用 无法直接支持核心数据 保存到存储并维护该存储 已更改托管对象中的状态 上下文,同时保持 未保存的堆栈作为当前文档


有趣的说法是“核心数据不能…”-当然,CD“可以”做到这一点,尽管我可以看到它可能需要大量的代码和跳转才能工作。听起来更像是借口而不是解释。

我对文档的理解是,在保存时,它不会再次自动保存(除非在保存时修改了某些数据?)。0.1秒是为了加快测试/调试速度,我认为这不会影响保存是否有效-您认为这是原因吗?