继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

iOS中CoreData的基本使用

zhyilong
关注TA
已关注
手记 1
粉丝 0
获赞 6
了解CoreData
  1. CoreData是苹果公司提供的一种数据持久化方案或者说是框架;
  2. CoreData是对SQLite的一次封装,极大的简化了对数据库的操作;
  3. CoreData在数据的同步上采用的缓存机制,将数据首先放置到缓存区中,NSManagedObjectContext发起save操作,才会通过NSPersistentStoreCoordinate与数据交互并执行数据库操作,这样避免了因数据操作而带来的I/O操作,提高了效率;
核心类的介绍
  • NSManagedObjectModel:CoreData的数据模型对象,可以理解为数据库的设计图纸;
  • NSPersistentStoreCoordinate:通过NSManagedObjectModel与关联创建本地的数据库,可以理解为数据库本身;
  • NSManagedObjectContext:对象托管即管理着来自数据库的对象,多会缓存这里;
CoreData的基本使用

//从本地加载对象模型
NSString path = [[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"];
NSManagedObjectModel
mgrmodel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];

//创建本地数据库(数据库协调器)
NSPersistentStoreCoordinator* coord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mgrmodel];
path = [NSString stringWithFormat:@"%@/Documents/DB.data", NSHomeDirectory()];
[coord addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:path] options:nil error:nil];

//数据库关联到缓存区域(托管对象管理)
NSManagedObjectContext* ctxt = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
ctxt.persistentStoreCoordinator = coord;
增删改查

假设我们已经建立好的数据模型,其中已经建立了User模型,含有name,age,sex属性

数据的插入

//这里创建了对象,但是只是存放在缓存区域中
User* usr = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:ctxt];
usr.name = @"text";
usr.age = 25;
usr.sex = @"男";
//此时才将数据保存到数据中
[ctxt save:nil];

数据查询

//创建查询请求
NSFetchRequest* fetch = [[NSFetchRequest alloc] initWithEntityName:@"User"];
//查询条件
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"age=25"];
fetch.predicate = predicate;
NSArray* result = [ctxt executeFetchRequest:fetch error:nil];

分页查询

//记录当前查询页数
static NSInteger page = 0;
//每页的数量
[fetch setFetchLimit:10];
//游标,记录已经查询到的位置
[fetch setFetchOffset:page * 10];

数据更新

fetch = [[NSFetchRequest alloc] initWithEntityName:@"User"];
//查询条件
predicate = [NSPredicate predicateWithFormat:@"age=25"];
fetch.predicate = predicate;
result = [ctxt executeFetchRequest:fetch error:nil];
if ([result count] > 0)
{
    //批量修改数据 
   [result setValue:[NSNumber numberWithInt:30] forKey:@"age"];
}
//同步到数据库中
[ctxt save:nil];

删除数据

[ctxt deleteObject:[result firstObject]];
[ctxt save:nil];

批量删除数据

fetch = [[NSFetchRequest alloc] initWithEntityName:@"User"];
NSBatchDeleteRequest* delrequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest:fetch];
[coord executeRequest:delrequest withContext:ctxt error:nil];
打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP