实现版本的问题

时间:2011-10-17 08:58:37

标签: cocoa core-data versions

我尝试在已经为Snow Leopard编写的应用程序中实现版本。它是一个基于文档的应用程序,带有SQLite存储。每个文档都保存为SQLite db文件。

我在NSPersistentDocument子类中实现了适当的方法:

+ (BOOL)autosavesInPlace {return YES;}
+ (BOOL)preservesVersions {return YES;}

现在我在应用程序中使用“保存版本”等新文件菜单。我在我的应用程序中创建新文档,保存,进行一些更改,再次保存..当我进入版本浏览器时,我得到:

kCGErrorFailure: CGSDisplayID: App trying to enumerate [0 to CGSGetNumberOfDisplays()] instead of using CGSGetDisplayList().  Compensating...
kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.

在版本浏览器的右侧版本列表中,我看到的版本很少,但它们并没有显示在窗口堆栈中。它看起来像堆栈,但完全透明。当我点击列表中的任何版本时,我得到日志:

CoreData: error: (8) attempt to write a readonly database

如果我尝试恢复其中一个版本 - 版本浏览器通常关闭,则不会出现窗口并且程序停止响应。

我无法理解这一切意味着什么。在保存版本或恢复方面有问题吗?我只是没有想法。将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

打开版本浏览器时,每个Core Data存储都已存储在磁盘上。您是否已查看过创建文档和阅读文档的覆盖内容?你确定他们都没有编辑文件吗?您可能还需要检查awakeFromNib方法,以确定您没有在新文档中编写/保存任何内容。

离开版本浏览器时可能很难调试问题。为方便起见,您可以编辑当前方案,选择“选项”选项卡,然后选中“启用调试”浏览所有版本“模式”。