Core Data 应该只用于特定类型的数据模型还是可以一直使用?

Posted

技术标签:

【中文标题】Core Data 应该只用于特定类型的数据模型还是可以一直使用?【英文标题】:Should Core Data be used in only specific types of data models or can it always be used? 【发布时间】:2013-05-01 02:35:20 【问题描述】:

我正在构建 ios 应用程序。许多书籍都谈到了使用 Core Data 的力量。到目前为止,我几乎一直在避免使用 Core Data,因为它似乎从未适用于我创建的应用程序类型。我不确定这是不是真的,或者我没有意识到这是怎么回事。

例如,我为 iPad 构建了一个视频扑克应用程序。我已经根据 MVC 范例分离了应用程序。我的模型是我创建卡片的地方。由于我正在跟踪正在播放和丢弃的卡片,我将我的模型设置为单例,我的视图控制器向模型询问它需要的卡片。

然后我想,也许我可以重建这种类型的应用程序以更好地了解 Core Data 的工作原理。我在想,我的 View Controller 将引用 Core Data 模型,而不是单例模型。我知道 Core Data 是 MVC 设计模式的模型。 Core Data 存储对象。我的卡片是对象。这似乎适用。我应该能够使用 Core Data 重建我的应用程序。对?

那么我读到的关于 Core Data 的所有内容都是这样的:假设你有一个作者并且他们写了几本书。作者与书、书与作者之间存在关系。 Core Data 允许我对作者进行排队,它允许我访问他的书籍或操作该数据。

在我的示例中 - 创建/访问卡片对象 - 我没有处理作者 - 书籍类型关系。既然我没有处理这个问题,我是否应该假设 Core Data 不应该/不能在我描述的应用程序中使用?

我必须像作者这样的关系才能使用 Core Data 吗?还是这些示例只是展示了 Core Data 中内置的复杂功能?

我并不急于使用 Core Data 重建我的应用程序,它可以正常工作。我只是在寻找一些方向,以了解如何更好地理解我何时以及为什么想要/需要使用 Core Data。

【问题讨论】:

【参考方案1】:

如果您需要持久化数据,您将使用核心数据。它是一个现成的持久性和对象管理框架。您无需担心数据存储或检索方式的详细信息。

即使您只有一个实体(您的卡)。使用核心数据还是可以的。如果关系与您的案件无关,您不必建立关系。在您的特定示例中,您可能想要跟踪所玩的每一场扑克游戏、每个玩家的手牌、发牌。这可能用于赛后分析 - 或查看历史记录,或自动重播游戏。您可以非常轻松地将所有这些存储在 Core Data 中。

我使用核心数据的一些例子:

我有一个应用程序 Flickr Gallery PRO。我保留所有查看过的照片和查看过的所有照片流的历史记录。我使用 Core Data 存储这些。如果我不为此使用 Core Data,我将不得不推出自己的持久性机制。

我的另一个应用程序,Stats for Flurry,我再次使用 Core Data。这里的目的是供离线使用并与 Flurry 服务器同步。我调用 Flurry 服务器来下载数据,并将其保存到 Core Data。

我曾为大型报纸开发过应用程序。我们再次使用 Core Data,以便应用同步到服务器、下载最新新闻并将其存储在 Core Data 中,以便用户稍后离线阅读。

【讨论】:

+1 Core Data 如果您根本不使用持久性,有时也很有意义。有内存存储类型。首先,Core Data 是一个对象图管理框架:它管理的对象图即使没有持久性也很有用。 你是对的。我忘记了这一点,因为我从不将它用于内存存储类型。

以上是关于Core Data 应该只用于特定类型的数据模型还是可以一直使用?的主要内容,如果未能解决你的问题,请参考以下文章

何时版本化 Core Data 模型

iPhone iOS Core Data 我应该为我的实体子类化一个抽象实体吗?

我应该将 Core Data 用于实时应用程序吗

Swift Core Data NSFetchRequest 没有结果

如何在复杂的 Core Data 模型中高效访问数据

Swift Core Data:Core Data 中的枚举 [重复]