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的函数在实现的过程中不能使用局部变量。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值