何时在 iPhone 开发中使用 CoreData

Posted

技术标签:

【中文标题】何时在 iPhone 开发中使用 CoreData【英文标题】:When to use CoreData in iPhone development 【发布时间】:2010-10-04 18:20:21 【问题描述】:

我一直在考虑为 ios 创建一个新的应用程序,在我最近的几个应用程序之后,我一直很想使用 CoreData(以获得包括保存和自动撤消/重做在内的好处)。

我在尝试实现我在项目中获得的数据模型时有点困惑,因为 CoreData 似乎比数据模型更接近数据库。

我是否应该将 CoreData 用于通常不符合我通常使用 SQL 样式数据库的“大量数据/记录”描述的应用程序?

如果有帮助,我正在设计的应用程序将是一种文档编辑器,因此我需要表示许多对象(文档中可能包含嵌入的图像、图形/图表、超链接等) 我需要从 xml 描述中创建这个模型。

这些“项目”中的大多数都需要实现一组接口(该模型是为 Java 产品创建的;我很难看到继承和抽象接口如何应用于 CoreData),以及我发现的每个示例到目前为止,似乎将基本元素(如 NSDate 或 String)添加到一个简单的模型中。

这听起来像是 CoreData 的候选者,还是 CoreData 更像是在应用程序中实现数据库的工具? (即图书馆系统/员工数据库)。

【问题讨论】:

【参考方案1】:

一旦您能够正确编写它将替换的大部分代码,请考虑将 CoreData 作为一个选项。所以一旦你知道如何正确序列化/反序列化、编写撤消/重做、KVO、复制等。

我是否应该使用 CoreData 通常不适合的应用程序 '大量数据/记录' 描述我通常会使用 SQL风格的数据库?

CoreData 不限于大型数据库(根本) - 它适用于小型数据库,以及超出数据库(二进制文件和文档,直接在内存中使用模型)。

您的示例可以从 CoreData 中受益。这取决于您需要的自定义代码量 - 如果您只是将 CD 对象用作界面生成器,并且您的应用程序使用大量自定义代码/对象,有时编写代码会更容易。老实说,我从未在交付应用程序中使用过 CoreData - 在此之前我总是找到将模型迁移到现有代码的理由(假设在开发/建模阶段也使用了 CoreData)。

这是一个不错的框架,但不应将其视为可以解决大多数问题的“神奇对象生成器”。首先,您需要了解您打算用它替换的技术/模式。它的理想用途有限。如果您无法编写对象所依赖的代码,请不要使用 CoreData。 iow - 不要将其视为初始努力的替代品,因为有时它是一个好的选择和一个坏的选择 - 但如果你不(真正)理解你的上下文,你就无法为你的上下文做出客观的答案它的能力。

【讨论】:

【参考方案2】:

Core Data 的一个目的是管理内存中的对象图。这当然适合您的应用程序。然后可以轻松地将其持久化到磁盘。使用mogenerator 之类的工具,您可以使用 Core Data 来管理对象生命周期、图形和持久性,但在顶部添加您的自定义协议。

简而言之,是的,您可以将 Core Data 用于非数据库用途,但需要做一些工作以符合模型。

【讨论】:

唐是正确的。如果您将 Core Data 视为“在应用程序中实现数据库的工具”,您将会遇到麻烦。它是一个对象持久性框架,碰巧(通常)使用数据库作为其数据存储。将其视为数据库将导致您可能会后悔的设计和编码决策。 @Robot K - 这是一个更好的解释!

以上是关于何时在 iPhone 开发中使用 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

iPhone开发——使用CoreData查询相关记录

CoreData 何时真正写入 sqlite 文件?

何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?

何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?

iPhone CoreData:如何按天对获取的结果进行分组?

使用 GameKit 通过 NSDictionary 在 iPhone 之间传输 CoreData 数据