使用自动保存的核心数据保存第一次,然后在所有后续自动保存中使用“NoSuchFieldError”崩溃

时间:2011-05-08 21:35:13

标签: cocoa macos core-data nsdocument

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

然后我开启了这样的自动保存:

[[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1];

......并且立即出现了可怕的错误。

第一次自动保存正常,100%正确。即它将文件保存在用户的私人目录中,如果您退出应用程序并重新启动,则autosaved-doc会自动重新打开。酷!

但是,只要您对数据进行第二次更改,您就会在自动保存中出现崩溃,其中包含:

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秒后失败???

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在这些内容之间进行阅读,这似乎是Apple使用NSDocument实现Core Data的一个已知缺陷:自动保存已被破坏,他们无意修复它。

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

  

“保存到...”和自动保存不是   直接支持 - 核心数据不能   保存到商店并保持不变   更改了托管对象中的状态   上下文,一直保持着   未保存的堆栈作为当前文档。

有趣的声称“核心数据不能......” - 当然,CD“可以”做到这一点,虽然我可以看到它可能是很多代码并且通过箍来使其工作。听起来更像是借口而不是解释。