iOS核心数据:对核心数据和数据库感到困惑

我真的很困惑核心数据实际上是什么。 或者我想我的问题是,在处理数据库时,您会使用Core Data吗? 就像我想从数据库访问值一样,我会使用Core Data来访问这些值吗? 我该如何处理这个问题?

十分感谢你的帮助。

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

核心数据可以使用数据库来实现这一目标,但这是业务,而不是你的业务。 当您使用Core Data时,它是一个黑盒子。 您告诉它保存数据然后逐步退出。

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

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

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

其次,当你有一堆以JSONforms出现的对象时,你希望以后能够存储和访问这些对象。 假设你有一个典型的应用程序,你有一个用户和一些关于用户的信息,我们称之为Thing。 用户拥有东西。 当您想要了解用户的某些信息时,您可以使用谓词(通常是“名称”或类似名称)来检索核心数据记录,并且您将获得有关用户的所有信息。 您可以再次利用关系来探索用户的连接并轻松显示信息。 也许用户有很多东西,然后你可以说“user.things”,你得到一个代表那些东西的NSManagedObjects NSSet。

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

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

对象模型更改后,可以维护所有现有信息并将其迁移到新模型。 核心数据可以在可能的情况下管理自动(轻量级迁移),或者如果您进行了更激进的更改,则可以提供规则来处理迁移。

核心数据的局限在于它不适合存储二进制文件。 如果您有需要存储的图像,那么存储到图像位置的路径要比存储实际数据好得多。

是的,如果您想在设备上使用本地数据库,Core Data是适当的技术。 使用核心数据编程指南开始研究可能是有意义的。

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

但核心数据通常是要走的路。