2012-10-09 139 views
2

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

非常感谢您的帮助。

回答

8

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

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

如果您想与现有的数据库(如Web服务器上的MySQL数据库)进行交互,那完全是另一回事。您可以使用核心数据在设备上存储对象的本地副本,但在这种情况下,核心数据不会在意这些对象是来自其他数据库的副本。它不关心。核心数据编程指南中的

+0

好的,谢谢,所以我的问题是现在,我将如何与数据库交互,我会走什么路线?什么样的数据库最适合?或者,如果我想通过网络将值存储到数据库服务器上,我将如何处理这个问题。非常感谢! – AustinT

+1

您似乎在询问关于Web服务的后端 - 您将使用JSON over HTTP或类似方式与“数据库服务器”进行通信。也许你应该看看parse.com或其他后端服务,以开始你想做的任何事情。 –

+0

是的,我想我是要求后端谢谢你! – AustinT

3

是的,如果你想在你的设备上使用本地数据库,Core Data是合适的技术。用Core Data Programming Guide开始您的研究可能是有意义的。

您可以选择使用SQLite(核心数据在后端使用),但核心数据提供了一些材料优势,并且是iOS的首选数据库接口。如果你决定追求SQLite出于任何原因,但是,我建议你考虑使用FMDB Objective-C SQLite wrapper

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

+0

+1。我会说如果你打算对Core Data做任何严肃的事情,就必须阅读。 –

+0

但是如果您需要利用远程数据库,您会做什么?苹果在解释Core Data如何适用 - 或者在这种情况下并没有很好的工作。提前致谢。 –

+0

@AlexZavatone他们没有真正讨论,因为iOS应用程序和服务器数据库之间确实没有整合。您通常在您的Web服务器上运行Web服务,该服务器与服务器上的数据库进行通信。 iOS应用程序与服务器的集成仅限于提出Web服务的请求,并且与服务器的数据库完全隔离。 – Rob

4

这是一种方便的原生方式,可以将数据存储在您的iOS应用程序中。不要认为它是sqlite,尽管你可以通过各种sqlite工具查看它创建的文件。相反,将其视为操纵对您的应用程序很重要的信息对象图的工具。

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

其次,如果您有一堆以JSON形式出现的对象,并且希望能够稍后存储和访问这些对象,那就太棒了。比方说,你有一个典型的应用程序,你有一个用户和一些关于用户的信息,我们称之为事情。用户拥有东西。当你想知道某个用户的某些事情时,你可以使用一个谓词(通常是“名称”或类似的名称)来检索核心数据记录,并获得有关用户的所有信息。再次,您可以利用关系来探索用户的连接并简化显示信息。也许用户有很多东西,那么你可以说“user.things”,并且你得到一个代表这些事情的NSManagedObjects的NSSet。

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

当你想从核心数据自动化的信息显示,您可以使用一个NSFetchedResultsController发起获取,并通过委托方法来改变底层数据作出回应。如果将UITableView设置为使用NSFetchedResultsController作为数据源,则只要单元格中显示的对象发生更改,就可以自动更新表格。对于定期更新信息并希望显示内容保持最新的应用程序非常有用。

当您的对象模型更改时,可以保留所有现有信息并将其迁移到新模型。核心数据尽可能管理自动(轻量级迁移),或者如果您做了更为彻底的更改,则可以提供处理迁移的规则。

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