0

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

然后我像这样打开自动保存:

[[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1];

......它立刻就发生了可怕的错误。

第一次自动保存工作,100% 正确。即它将文件保存在用户的私有目录中,如果您退出应用程序并重新启动,则自动保存的文档会自动重新打开。凉爽的!

但是,一旦您对数据进行第二次更改,您就会在自动保存中崩溃,如下所示:

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"))

...这对我来说毫无意义。为什么 auto*SAVE* 会关心文件是否存在?为什么它第一次工作,然后又失败了?

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

4

2 回答 2

1

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

于 2011-05-09T03:43:02.167 回答
0

从字里行间看,这似乎是 Apple 使用 NSDocument 实施 Core Data 的一个已知缺陷:自动保存已损坏,他们不打算修复它。

从 NSPersistentDocument(在项目创建时选择 Core Data 和 NSDocument 时使用的 NSDocument 的子类):

不直接支持“Save To...”和 Autosave——Core Data 无法保存到存储并在托管对象上下文中保持相同的更改状态,同时保持未保存的堆栈作为当前文档。

有趣的说法是“Core Data 不能……”——当然,CD“可以”做到这一点,尽管我可以看到它可能需要很多代码,并且需要跳过一些圈才能使其工作。听起来更像是借口而不是解释。

于 2011-05-16T00:20:03.817 回答