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

标签 macos core-data versions osx-lion autosave

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

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

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

我从苹果代表那里听到了关于我们应该采取的方法的相互矛盾的意见,在我们开始实现之前澄清一些事情会很好。虽然我认为 1. 不应该被使用,但它也非常诱人,因为我们可以免费获得很多东西。我什至找不到关于在核心数据应用程序中手动实现自动保存和版本的足够文档。

我确实倾向于使用 1。但我发现了一些问题:

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

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

您对如何将鞋盒应用程序集成到新的 Lion 世界有什么建议或想法吗?

最佳答案

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

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

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

关于macos - OS X Lion 中具有自动保存和版本功能的 Shoebox/Library 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889485/

相关文章:

android - 哪个手机适用于大多数 Android 版本?

android - 我应该为哪个版本的 Android 开发?

macos - 如何设置键绑定(bind)以在 Atom 中移动(重新排列)选项卡?

ios - 带有 NSManagedObject 的 EVReflection 崩溃/不工作

swift - 未保存核心数据关系数据

ios - 从核心数据中获取对象数组

mysql - 创建ejabberd用户

python - 使用 Django/Python : ModuleNotFoundError: No module named 'pages' 创建初学者应用程序

objective-c - 可以在 OS X 上获取_所有_渲染文本吗?

svn - 是否可以在 svn 中取消恢复?