使用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秒后失败???
答案 0 :(得分:1)
为什么你试图每秒自动保存十次?那太频繁了。实际保存文件可能需要超过十分之一秒的时间。一个更好的值将是10秒,这可能比实际需要更频繁。
答案 1 :(得分:0)
在这些内容之间进行阅读,这似乎是Apple使用NSDocument实现Core Data的一个已知缺陷:自动保存已被破坏,他们无意修复它。
来自NSPersistentDocument(在项目创建时选择Core Data和NSDocument时使用的NSDocument的子类):
“保存到...”和自动保存不是 直接支持 - 核心数据不能 保存到商店并保持不变 更改了托管对象中的状态 上下文,一直保持着 未保存的堆栈作为当前文档。
有趣的声称“核心数据不能......” - 当然,CD“可以”做到这一点,虽然我可以看到它可能是很多代码并且通过箍来使其工作。听起来更像是借口而不是解释。