【问题标题】:Data Store for a Mac/iPhone Hybrid AppMac/iPhone 混合应用程序的数据存储
【发布时间】:2010-10-01 09:20:45
【问题描述】:

过去 5 个月左右我一直在做 iPhone 开发,并且一直在使用 Gus Mueller 的FMDB 进行数据库交互。我的下一个项目将有一个 Mac 和一个 iPhone 应用程序,它们将在它们之间共享数据,尽管最终,iPhone 将主要是一个查看器应用程序,具有一些小的编辑功能。

我的问题是:Core Data 是否会让我在 Mac 端的生活变得足够轻松,是否值得将我的数据模型编写两次,在 Mac 上使用 Core Data,在 iPhone 上使用 FMDB?或者我应该对两者都使用 FMDB,以便我可以在 Mac 和 iPhone 上重复使用相同的代码?

我对 Core Data 有过一些了解,但并不多(主要是 Hillegas 书中的示例),因此任何支持 Core Data 的具体示例都将不胜感激。郑重声明,我真的很喜欢 FMDB,我只是想知道 Core Data 在这种情况下是否会让我的生活变得更轻松。

编辑: 我了解 FMDB 和 Core Data 之间的核心区别,我主要是想了解 Core Data 提供的“免费”功能是否值得对我的数据模型进行两次编码。

【问题讨论】:

    标签: iphone cocoa macos core-data


    【解决方案1】:

    主要区别在于 FMDB 是 SQLite 的 Obj-C 包装器,而 CoreData 是碰巧在 SQLite 中存储数据的对象模型(您不是在编辑数据库,而是在编辑对象)。这意味着它更高级别并提供更多抽象,但如果您知道您在使用数据库做什么,那么您应该可以使用其中任何一个。就我个人而言,我宁愿在共享代码方面犯错,因为它会导致更少的错误、更容易的开发和更快的发布。

    【讨论】:

      【解决方案2】:

      我同意马丁的观点。如果您编写桌面应用程序,我会说使用 Core Data。由于您同时进行这两种操作,因此在尝试在存储模型之间进行转换时出现问题的可能性确实指向将 FMDB 用于台式机和手机。

      【讨论】:

        【解决方案3】:

        代码共享很好,但是根据模型和模型控制器类的相似程度,您可能不想完全打折 Core Data。例如,除了对象持久性之外,您还可以“免费”获得非常好的撤消/重做支持。您可能想要做一个快速原型来判断您最终可能会在两个应用程序之间重写多少代码。

        【讨论】:

          【解决方案4】:

          您可能还想研究来自 OmniGroup 的 OmniDataObjects 框架。它在 OS X 和 iPhone OS 上的 SQLite 之上实现了 CoreData 功能的子集。我相信他们在 OmniFocus 的 OS X 和 iPhone 版本中都使用了它。

          【讨论】:

            【解决方案5】:

            Core Data 的优势在于它是一个对象图管理框架,恰好可以持久化到 SQLite(或二进制或 XML 或自定义)数据存储中。因此,它管理单个对象实例的故障和对象之间的双向(包括对多)关系(包括基于这些关系传播或拒绝删除的几个选项)以及验证对单个对象属性和关系的约束(包括必需/可选、基数、范围等)。在 OS X 10.5 中,它还包括用于在模型模式之间半自动迁移数据存储的工具。

            当然,缺点是它在 iPhone 上不可用。如果 FMDB 满足您的需求,您可能会更轻松地管理一个代码库而不是两个代码库。

            如果您的桌面应用程序需要 Leopard,最后一个选择是使用 FMDB 编写一个 NSAtomicStore 子类。 NSAtomicStore 必须将整个存储读取到内存中——因此你会失去 SQLite 在桌面客户端上的一些好处——但由于数据将在 iPhone 上共享,我猜你不会有那么多数据无论如何。通过这种方法,您可以在客户端使用 Core Data,在 iPhone 上使用 FMDB,并在两者之间使用通用数据模型/数据存储。

            【讨论】:

              【解决方案6】:

              我不知道你的项目涉及什么类型的数据,但是如果它以任何方式处理人员的记录,并且记录的数量相当少,你也可以使用内置的通讯录( ABAddressBook 类)作为数据库。

              它让您可以添加您的应用独有的属性(在其他不使用它们的应用中不可见),并且您可以完全免费地在 iPhone 和 mac 之间进行同步。

              【讨论】:

                【解决方案7】:

                所以,现在这个问题可能已经完全解决了,但是为了后代,我想提一下,对于 iPhone OS 3.0,Core Data is 在 iPhone 上,如果你想使用它在 Mac 应用中,您可以与 iPhone 应用共享大量工作。

                【讨论】:

                  猜你喜欢
                  • 2011-09-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-05-17
                  • 1970-01-01
                  • 2011-12-20
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多