0

我尝试在已经为 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

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

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

4

1 回答 1

1

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

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

于 2011-10-18T07:36:37.697 回答