2011-07-31 22 views
7

我们有一个鞋盒式应用程序,我们希望在Lion中创造一流的公民。这意味着整合自动保存&版本等。目前我们没有以文档为中心的模型,我们只是使用普通的Core Data栈。在OS X Lion中使用自动保存和版本的鞋盒/图书馆应用程序

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

  1. “滥用” NSPersistentDocument我们的鞋盒式应用程序。从技术上讲,这将是一个基于文档的应用程序,但用户界面仍然是相同的iPhoto类库。这在概念上并不合理,但我们可以免费获得许多功能。
  2. 保留当前普通的Core Data堆栈并手动实现自动保存&版本。

我听到苹果代表对我们应该采取的方法提出反对意见,在我们开始实施之前澄清事情会很好。虽然我认为不应该使用它,但它也很诱人,因为我们可以免费获得很多东西。我甚至找不到在Core Data应用程序中手动实现自动保存&版本的足够文档。

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

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

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

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

+1

什么是“鞋盒式应用”? – TechZen

+1

shoebox或库应用程序是一种将所有数据保存在一个窗口中而不是使用多个文档的应用程序。适用于鞋盒式应用的好例子是iPhoto,iTunes;基于文档的应用程序的好例子是Pages或Keynote。虽然iTunes和iPhoto是鞋盒应用程序,但它们仍然与“库”一起工作,该库本身就是一个文档,您可以在不同的库之间切换。 –

回答

3

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

但有一个问题,你必须回答自己:您的应用程序的哪些部分,你想要放入版本?当涉及到恢复数据时,在单个文件中是否有的所有内容是否真的有意义?版本恢复(复制&粘贴除外)发生在文件系统级别上。因此,一直恢复一切是否真的有意义?如果你的答案是否定的,你可能甚至不得不将你分成多个小文件......

在下一个主要版本发布之前,不要期待改进。这是我从工程师的评论中猜到的......

+1

+1只有在相同内容随时间变化的文档环境中,版本控制才有意义。由于您通常只想捕获数据的当前状态,因此具有不同的所有功能于一身的数据库存储“版本”是没有意义的。在数据库中,一个新的“版本”几乎总是被当作新的数据。如果您需要在数据库中使用版本控制功能,则可以将其设计为数据模型本身,因为它不像在文档版本控制的情况下在不同时间输入数据那么简单。 – TechZen

+0

@Max:您也可以使用NSFileVersion并为版本创建您自己的用户界面,但您不会获得所有人都习惯的花哨Time Machine UI。如果每个应用都有自己的自定义版本用户界面,我认为从用户角度来看,这对用户不会有好处。还有一个问题,即NSPersistentDocument *支持基于SQLite的Core Data模型的基于记录的保存。对我来说,看起来执行没有完成,因为自然演变将会是版本也支持基于记录(而不是基于文件)的修改。拆分模型不起作用(Shoebox)。 –

+0

@ TechZen:是的,你基本上是对的。但那么什么是文件?您可以在NSFileWrapper中拥有基于核心数据的文档,该文档仍然包含具有辅助文件的完整模型。如果我们拿一本书的例子,你在哪里画线?每一份文件都是一本书,里面有章节,或者是一个文件库,里面藏有不同的书籍,而且你有不同的图书馆,如研究,趣味,漫画书?核心数据不是数据库,API不允许像使用经典数据库那样与模型进行交互。此外,NSPersistentDocument和iCloud已经为CD提供了基于记录的支持。 –

相关问题