预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
CoreDataCoreData是一个Cocoa框架,用于为管理对象图提供基础实现,以及为多种文件格式的持久化提供支持。管理对象图包含的工作如撤销(undo)和重做(redo)、有效性检查、以及保证对象关系的完整性等。对象的持久化意味着CoreData可以将模型对象保存到持久化存储中,并在需要的时候将它们取出。CoreData应用程序的持久化存储(也就是对象数据的最终归档形式)的范围可以从XML文件到SQL数据库。CoreData用在关系数据库的前端应用程序是很理想的,但是所有的Cocoa应用程序都可以利用它的能力。CoreData中包含一个NSPersistentDocument类,它是NSDocument的子类,用与协助CoreData和文档架构之间的集成。持久化文档对象创建自己的持久化堆栈和托管对象上下文,将文档映射到一个外部的数据存储;NSPersistentDocument对象则为NSDocument中读写文档数据的方法提供缺省的实现。通过CoreData管理应用程序的数据模型,可以极大程度减少需编写的代码数量。CoreData还具有下述特征:将对象数据存储在SQLite数据库以获得性能优化。提供NSFetchedResultsController类用于管理表视图的数据。即将CoreData的持久化存储显示在表视图中,并对这些数据进行管理:增、删,改。管理undo/redo操作。检查托管对象的属性值是否正确。使用CoreData有很多原因,其中最简单的一条就是:它能让你为Model层写的代码的行数减少为原来的50%到70%。这归功于之前提到的CoreData的特性。更妙的是,对于上述特性你也既不用去测试,也不用花功夫去优化。CoreData拥有成熟的代码,这些代码通过单元测试来保证品质。应用CoreData的程序每天被世界上几百万用户使用。通过了几个版本的发布,已经被高度优化。它能利用Model层的信息和运行时的特性,而不通过程序层的代码实现。除了提供强大的安全支持和错误处理外,它还提供了最优的内存扩展性,可实现有竞争力的解决方案。不使用CoreData的话,你需要花很长时间来起草自己的方案,解决各种问题,这样做效率不高在大多数应用中,需要打开一个文件,此文件包含一个有多个对象的归档,或者包含一个对至少一个根对象的引用。还需要能够归档所有对象到一个文件,并跟踪对象的变化。例如,在一个员工管理应用中,需要一种方法来打开一个文件,其中包含员工和部门对象的归档,并包含一个对至少一个根对象的引用——例如,含有全体员工的数组——如图7-1。还需要能够归档所有员工和所有部门到一个文件。CoreData基本架构使用的CoreData框架,大多数功能可以自动提供,这主要通过名为托管对象上下文(managedobjectcontext,或只是“上下文”,类NSManagedObjectContext的实例)来实现。托管对象的上下文就像一个网关,通过它可以访问底层的框架对象集合——这些对象集合统称为持久化堆栈(persistencestack)——它在应用程序和外部数据存储的对象之间提供访问通道。在堆栈的底部是持久化对象存储(persistentobjectstores),如图7-2所示。CoreData基本架构可以把托管对象上下文作为一个智能便笺。当从持久化存储中获取对象时,这些对象的临时副本会在便笺上形成一个对象图(或者对象图的集合。对象图即对象+对象之间的联系),然后便可以任意修改这些对象。除非保存这些修改,否则持久化存储是不会受影响的。CoreData框架中的模型对象(ModelObjects,它是一种含有应用程序数据的对象类型,提供对数据的访问并实现逻辑来处理数据)称为托管对象。所有托管对象都必须通过托管对象上下文进行注册。该上下文对象允许在图中加入或删除对象,以及跟踪图中对象的变化,并因此可以提供撤销(undo)和重做(redo)的支持。当准备好保存对托管对象所做的修改时,托管对象上下文负责确保那些对象处于正确的状态。如果要保存所做的更改,上下文首先要验证对象是有效的。如果对象有效,所作的更改会被写到持久化存储中,创建对象会添加新记录,删除对象则会删除记录。可以在应用程序中使用多个上下文。对于持久化存储中的每一个对象,只有唯一的一个托管对象和给定的上下文相关联。从不同的角度考虑,持久化存储中的一个给定的对象,可在多个上下文中同时被编辑。然而,每个上下文都有它自己的对应着源对象的托管对象,每个托管对象都单独编辑。这样保存时就会导致数据不一致。CoreData提供了一些方法来处理这个问题,比如使用-(void)refreshObject:(NSManagedObject*)objectmergeChanges