2

我真的很困惑核心数据到底是什么。或者我想我的问题是,在处理数据库时,你会使用 Core Data 吗?就像我想从数据库中访问值一样,我会使用 Core Data 来访问这些值吗?我将如何解决这个问题?

十分感谢你的帮助。

4

3 回答 3

8

Core Data 是一个完成“对象持久性”工作的框架。换句话说,您可以使用的代码负责将对象集合保存到磁盘并稍后再次加载它们。它做了很多工作来允许您存储大量数据并一次只加载您需要的对象,并在内存紧张时卸载那些。

Core Data 可以使用数据库来完成此任务,但那是它的业务,而不是您的业务。当你使用 Core Data 时,它是一个黑盒子。你告诉它保存数据,然后让开。

如果您想与现有数据库交互,例如 Web 服务器上的 MySQL 数据库,那是完全不同的事情。您可能会使用 Core Data 在您的设备上存储对象的本地副本,但在这种情况下,Core Data 不会关心对象是来自其他数据库的副本。它不在乎。

于 2012-10-09T23:02:53.490 回答
4

它是在 iOS 应用程序中存储数据的一种方便的本地方式。不要将其视为 sqlite,尽管您可以使用各种 sqlite 工具查看它创建的文件。而是将其视为一种工具,用于处理对您的应用程序很重要的信息对象图。

我主要以两种方式使用它。首先存储一堆对应用程序很重要的静态数据,在一种情况下是用于室内地图应用程序的大量位置数据。作为航点的大量 CSV 文件到达的内容被转换为核心数据。Core Data 对此非常有用,因为它允许准备一个包含所有信息的应用程序附带的 sqlite 文件。来自 Web 服务的更新随着添加到核心数据中以保持信息最新的更多 CSV 到达。在运行时,位置信息对象(用户所在的航点)通过谓词(即他们点击的点)检索,并且该对象通过其核心数据关系指示从该点可以去哪里。Core Data 提供了通过室内地图执行 A* 路由所需的信息。

其次,当您有一堆以 JSON 形式到达的对象并且您希望以后能够存储和访问这些对象时,这很棒。假设您有一个典型的应用程序,其中有一个用户和一些关于用户的信息,我们称之为事物。用户拥有事物。当您想了解有关用户的某些信息时,您可以使用谓词(通常是“名称”或类似名称)检索 Core Data 记录,然后您将获得您存储的有关用户的所有信息。同样,您可以利用关系来探索用户的联系并使信息显示变得容易。也许用户有很多东西,然后你可以说“user.things”,你会得到一个代表这些东西的 NSManagedObjects 的 NSSet。

您可以像使用数据库一样使用它。它的实用性在于它可以轻松地从您的 iOS 代码中的任何位置访问,也易于存储和检索信息。故障允许您检索一个对象并通过遵循关系导航到通过关系连接的任何对象。因为您在数据模型编辑器中自己定义属性和关系,所以很容易针对您需要存储的内容进行定制。对我来说,它是 iOS 中最常用和最有用的部分之一。

当您想自动显示来自 Core Data 的信息时,您可以使用 NSFetchedResultsController 来启动提取并通过委托方法响应对基础数据的更改。如果您设置 UITableView 以使用 NSFetchedResultsController 作为数据源,您可以让表格在单元格中显示的对象发生更改时自动更新。对于您定期更新信息并希望显示的内容保持最新的应用程序非常有用。

当您的对象模型发生更改时,可以维护所有现有信息并将其迁移到新模型。Core Data 会在可能的情况下管理自动(轻量级迁移),或者如果您进行了更彻底的更改,您可以提供规则来处理迁移。

Core Data 的局限性在于它不适合存储二进制文件。如果您有需要存储的图像,存储图像位置的路径比尝试存储实际数据要好得多。

于 2012-10-09T22:59:36.783 回答
3

是的,如果你想在你的设备上建立一个本地数据库,Core Data 是合适的技术。从核心数据编程指南开始你的研究可能很有意义。

您也可以使用SQLite(Core Data 在后端使用它),但 Core Data 提供了一些物质优势,并且是 iOS 的首选数据库接口。但是,如果您出于任何原因决定使用 SQLite,我建议您考虑使用FMDB Objective-C SQLite 包装器

但是Core Data通常是要走的路。

于 2012-10-09T22:58:14.493 回答