OS X Lion中具有自动保存和版本的Shoebox/Library应用程序

Raf*_*ski 8 macos autosave versions core-data osx-lion

我们有一个鞋盒式的应用程序,我们希望在Lion中成为一流的公民.这意味着集成自动保存和版本等功能.目前我们没有以文档为中心的模型,我们只使用普通的Core Data堆栈.

UIPersistentDocument提供了一种非常简单的方法来集成自动保存和版本,我看到我们可以选择两个选项来集成新的API:

  1. "滥用"NSPersistentDocument为我们的鞋盒式应用程序.从技术上讲,它将是一个基于文档的应用程序,但用户界面仍然是相同的iPhoto类库.这在概念上没有多大意义,但我们会免费获得许多功能.
  2. 保留当前的纯Core数据堆栈并手动实现自动保存和版本.

我听到苹果公司代表对我们应采取的方法提出了矛盾的意见,在开始实施之前澄清事情会很棒.虽然我认为1.不应该使用它也很诱人,因为我们可以免费获得很多东西.我甚至找不到关于在核心数据应用程序中手动实现自动保存和版本的足够文档.

我真的倾向于使用1.但我看到一些问题:

  • 在使用版本和只有一个数据库文件时,我担心文件系统级别的冲突.我找不到有关此主题的任何文档.
  • 浏览"空间"时,我担心版本中的性能问题.
  • 我们不能仅强制执行一个开放数据库实例,因为版本必须打开多个实例.我担心副作用和并发问题.从概念上讲,它看起来像一个黑客,我不喜欢黑客.

如果我们只想集成iCloud同步,我绝对不会考虑为我们的应用程序使用以文档为中心的模型,因为Core Data直接支持它.如果我们坚持目前的非基于文档的范例,我最担心的是开发人员的开销.

您是否有任何建议或想法如何将鞋盒应用程序集成到新的Lion世界中?

Max*_*ann 3

恐怕您被迫使用第一个选项。版本是在 NSDocumentController *sic* 内部实现的,因此您必须使用某种方式NSDocument从版本中获取任何内容。我认为您还必须将应用程序的窗口添加到NSWindowController该文档中,以便在顶部获得漂亮的小弹出菜单。问题是版本或多或少是一个完全不透明的功能......

但有一个问题您必须自己回答:您希望将应用程序的哪些部分放入版本中?在恢复数据时,将所有内容都放在一个文件中真的有意义吗?版本恢复(复制和粘贴除外)发生在文件系统级别。因此,总是立即恢复所有内容真的有意义吗?如果您的答案是否定的,您甚至可能必须将模型分割成多个较小的文件......

在下一个主要版本发布之前不要指望这里会有改进。这是我从工程师的评论中猜测的......

  • 我支持TechZen的观点:你仍然可以将模型分割成单独的块,每个块使用高效的核心数据保存机制单独存储。顺便说一句:使用 CoreData 和 SQLLite,我敢打赌大多数写入实际上都会覆盖整个文件,即使只有一条记录发生变化...... (2认同)