iOS7应用开发12:Core Data

Core Data:一种数据库机制,可以用于保存应用中需要永久保存的数据,是一种面向对象的数据库,在ios中应用极为广泛。

应用方法:

(1)在xcode中建立一个visual mapping,即在新建文件中选择Core Data->Data Model。在Data Model文件中添加Entity,在Entity中添加attribute并设置类型。各个entity可以通过ctrl+拖动建立relation,并在右侧栏中设置relation的属性。

(2)另一种方式:通过NSManagedObjectContext——建立UIManagedDocument,并获取managedObjectContext属性;需在创建工程时选择“Use Core Data”。

UIManagedDocument:该类是UIDocument的派生类,提供了大量的数据保存相关的方法,可方便适应iCloud的应用;可视为Core Data数据库的简单容器;

* 创建UIManagedDocument对象

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] firstObject];! NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];

* 如何判断UIManagedDocument所关联的文件是否存在:

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[url path]];

* 若文件存在,打开文件:

[document openWithCompletionHandler:^(BOOL success){/*blocks to excute when open*/}];

* 若不存在:创建文件:

[document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){/*blocks to execute when create is done*/}]

 由于打开/保存是异步操作所以必须采用completionHandler进行结束后的操作。

* 使用保存的文件之前检测状态:self.document.documentState == UIDocumentStateNormal;

* 关闭文件:如果没有强引用指针指向,则会自动关闭;手动关闭使用closeWithCompletionHandler:方法;

Core Data的操作:

1、向数据库中添加对象:

NSManagedObjectContext *context = aDocument.managedObjectContext;
NSMagedObject *photo = [NSEntityDescription insertNewObjectForEntityForName:@"ObjName" inMagagedObjectContext:context];

2、获取NSManagedObject对象中的attribute:采用NSKeyValueCoding协议中的两个方法:

- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;

其中key是data mapping中的attribute name,value是数据库中保存的数据。
更优方法:

建立NSManagerObject类的派生类:选中data model中的entity,在editor中选择Create subclass;完成后将为每一个entity建立头文件和源文件;
然后1中的添加操作就可以用下列语句表示:

NSManagedObjectContext *context = document.managedObjectContext;
Photo *photo = [NSEntityDescription insertNewObjectForEntityForName:@“Photo” inManagedObjectContext:context];
// then set the attributes in our Photo using, say, an NSDictionary we got from Flickr ...! e.g. photo.title = [flickrData objectFor//Key:FLICKR_PHOTO_TITLE];!
// the information will automatically be saved (i.e. autosaved) into our document by Core Data
// now here’s some other things we could do too ...!
NSString *myThumbnail = photo.thumbnailURL; !
photo.lastViewedDate = [NSDate date]; !
photo.whoTook = ...; // a Photographer object we created or got by querying
photo.whoTook.name = @“CS193p Instructor”; // yes, multiple dots will follow relationships!

3、在数据库中删除记录

[aDocument.managedObjectContext deleteObject:photo];

#分类category

category在第8篇中已经有过简单介绍,这里不再过多费口舌了。

需要强调的一点是,category的函数在实现的过程中不能使用局部变量。

【好累啊……%>_<%】

时间: 2024-10-31 06:46:55

iOS7应用开发12:Core Data的相关文章

iOS App开发中Core Data框架基本的数据管理功能小结_IOS

一.何为CoreDataCoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL有一个十分明显的缺陷,对于常规数据模型的表,其处理起来是没问题的,例如一个班级表,其

详解iOS应用开发中Core Data数据存储的使用_IOS

1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中  2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法 复制代码 代码如下: <span style="font-size:18px;">    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;  @property (readonly, strong, n

《Core Data应用开发实践指南》一2.12 后端SQL的可见性

2.12 后端SQL的可见性 如果只在控制台的日志中查看Core Data所输出的结果,那么意义并不算太大.你知不知道这些事情背后究竟发生了什么?Core Data对持久化存储区中的数据到底进行了哪些操作?这些操作是否恰当?为了提供无缝的Core Data体验,系统都生成了哪些SQL查询语句?每次在模拟器中运行程序的时候,是不是会插入重复的对象? 有个极其详尽的调试选项可以提供足够的信息,告诉你这些操作背后所发生的事情,从而令你知道上述那些问题的答案.这个调试选项会把系统自动生成的SQL查询语句

《Core Data应用开发实践指南》一3.5 通过迁移管理器来迁移数据

3.5 通过迁移管理器来迁移数据 除了通过NSPersistentStoreCoordinator来迁移存储区之外,还可以采用迁移管理器来做.迁移管理器可以使开发者全权掌控迁移过程中创建的文件,从而令他们能够按自己的方式来灵活处理迁移中的各种问题.使用迁移管理器的一个好处就是可以向用户报告迁移进度,使用户知道应用程序哪次会启动得比较慢一些,所以需要耐心等待.虽说迁移过程理应执行得非常快才对,但当数据库比较大.变动比较复杂时,迁移过程就需要耗费一定的时间了.为了使用户界面保持流畅,迁移过程必须在后

《Core Data应用开发实践指南》一1.4 为现有的应用程序添加Core Data支持

1.4 为现有的应用程序添加Core Data支持 在Xcode中创建iOS应用程序项目时,可以使用各种起始模板(starting-point template).假如要根据Master-Detail.Utility Application或Empty Application等模板来创建项目,那么只需勾选Use Core Data,即可在项目中使用Core Data.不过,Grocery Dude项目是根据Single View Application模板创建的,它起初并没有包含Core Dat

《Core Data应用开发实践指南》一2.13 获取托管对象

2.13 获取托管对象 想操作托管对象上下文中的现有数据,就必须先把它获取(fetch)过来.假如待获取的数据没有放在上下文里,那么Core Data会从底层的持久化存储区里把它拿出来,这个过程对开发者来说是透明的.要执行获取操作,就得有NSFetchRequest实例,该实例会返回NSArray,这个数组里面的元素都是托管对象.在执行获取操作的时候,NSFetchRequest会根据特定的实体,把每个托管对象都放在NSArray这个数组中,并将其返回给调用者.用SQL数据库领域的术语来说,获取

iOS 开发中使用 Core Data 应避免的十个错误

Core Data是苹果针对Mac和iOS平台开发的一个框架主要用来储存数据.对很多开发者来说Core Data比较容易入手但很难精通如果没有正确的学习方法你将很难真正理解它更不用说精通了.很多开发者常常在这方面犯一些错误而这篇文章列出了 开发者在iOS开发过程中使用Core Data常见的一些错误并对如何避免这些错误进行了分析. 1.不了解关键术语 对于iOS开发者来说会使用Core Data是一项必备技能. 没有它很多app都不会存在.当在互联网上四处搜索Core Data学习教程你很容易被

《Core Data应用开发实践指南》一1.2 Core Data的适用场合

1.2 Core Data的适用场合 如果应用程序要保存的设置数据太多,以致NSUserDefaults及"特性列表"(property list)这种简单的存储方案无法应付,那么就会出现内存占用量方面的问题.解决办法是直接使用数据库或通过Core Data来间接操作数据库.选用Core Data的好处是,不用再花时间编写数据库接口的代码了.此外,你还将享受性能方面的优势,而且可以使用诸如撤销及验证等强大的功能.假如选择直接使用数据库,那就要花时间去做开发与测试工作,也就是通常所说的&

《Core Data应用开发实践指南》一3.1 修改托管对象模型

3.1 修改托管对象模型 在应用程序的进化过程中,其托管对象模型也可能需要改变.对于一些比较简单的修改,诸如设定属性的默认值.设定验证规则.使用获取请求模板等,是可以直接实施的.而对于另外一些更为结构化的(structural)修改,则需先把持久化存储区迁移到新的模型版本才行.假如没有提供迁移数据所需的映射与设定,那么应用程序就会崩溃.为了继续构建范例程序,需要把上一章中的代码添加到Grocery Dude项目中.或者可以去http://www.timroadley.com/LearningCo