CoreData用于做数据持久化,适合大数据量的存储和查询,它不是数据库,但是他可以使用数据库,XML等方式来存储数据
SQLite使用SQL语句来操作数据,CoreData使用面向对象的方式操作数据,使用它无需编写任何SQL语句.使用之前需导入CoreData框架
CoreData主要有以下几个类:
1.NSManagedObjectModel数据模型对象
2.NSPersistentStoreCoordinator调度对象,添加持久化存储库,如SQLite数据库
3.NSManagedObjectContext负责应用和数据库之间的交互
4.NSEntityDescription:实体描述
二:操作步骤
·(1)创建momd文件(类似数据库文件),创建Entity【实体】(表),设置字段 类型
·(2)创建一个NSManagedObject类(MO对象) ·(2)构造NSManagedObjectModel对象,代指momd文件 ·(3)实例化PSC对象,指定存储路径以及数据持久化的方式(沙盒看到数据库文件 ·(4)设置上下文,操作这个上下文对象,来实现增、删、改、查
第一步:配置
//模型文件的地址
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
//1创建数据模型对象
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSLog(@"managedObjectModel:%@",managedObjectModel);
//2创建桥梁对象(调度对象)
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
//设置持久化策略
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/db.sqlite"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
if (!error) {
NSLog(@"创建数据库成功了");
}else{
NSLog(@"创建数据库失败了");
}
//3创建数据操作对象
context = [[NSManagedObjectContext alloc] init];
//将NSPersistentStoreCoordinator对象设置
[context setPersistentStoreCoordinator:coordinator];
//模型文件的地址
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
//1创建数据模型对象
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSLog(@"managedObjectModel:%@",managedObjectModel);
//2创建桥梁对象(调度对象)
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
//设置持久化策略
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/db.sqlite"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
if (!error) {
NSLog(@"创建数据库成功了");
}else{
NSLog(@"创建数据库失败了");
}
//3创建数据操作对象
context = [[NSManagedObjectContext alloc] init];
//将NSPersistentStoreCoordinator对象设置
[context setPersistentStoreCoordinator:coordinator];
//context是NSManagedObjectContext类
第二步:操作数据(增删改查)
//增
- (void)insert{
//插入多个数据
for (int i =0; i<10; i++) {
//创建数据模型对象
Student *stu = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];// Student是实体对象
stu.name = [NSString stringWithFormat:@"jack%d",i];
stu.age = @(i);
//将对象添加到上下文的容器中
[context insertObject:stu];
}
//保存
BOOL success =[context save:nil];
NSLog(@"success:%d",success);
}
//插入多个数据
for (int i =0; i<10; i++) {
//创建数据模型对象
Student *stu = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:context];// Student是实体对象
stu.name = [NSString stringWithFormat:@"jack%d",i];
stu.age = @(i);
//将对象添加到上下文的容器中
[context insertObject:stu];
}
//保存
BOOL success =[context save:nil];
NSLog(@"success:%d",success);
}
//查询
- (void)fetch{
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
//通过谓词设置查询条件
NSString *str = [NSString stringWithFormat:@"self.age>0"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
[fetch setPredicate:predicate];
//设置分页
/*
int page = 1;
[fetch setFetchLimit:5];
[fetch setFetchOffset:page*5];*/
//设置排序
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
[fetch setSortDescriptors:@[sort]];
NSArray *arr = [context executeFetchRequest:fetch error:nil];
stus = [NSMutableArray arrayWithArray:arr];
NSLog(@"stus:%@",stus);
}
- (void)fetch{
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
//通过谓词设置查询条件
NSString *str = [NSString stringWithFormat:@"self.age>0"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:str];
[fetch setPredicate:predicate];
//设置分页
/*
int page = 1;
[fetch setFetchLimit:5];
[fetch setFetchOffset:page*5];*/
//设置排序
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
[fetch setSortDescriptors:@[sort]];
NSArray *arr = [context executeFetchRequest:fetch error:nil];
stus = [NSMutableArray arrayWithArray:arr];
NSLog(@"stus:%@",stus);
}
//删
- (void)delete{
//更新数据
[context deleteObject:stus[0]];
//保存数据
[context save:nil];
}
//更新数据
[context deleteObject:stus[0]];
//保存数据
[context save:nil];
}
//改(更新)
- (void)update{
Student *stu2 = stus[1];
stu2.name = @"T";
stu2.age = @100;
//更新数据
[context updatedObjects];
//保存
[context save:nil];
}
Student *stu2 = stus[1];
stu2.name = @"T";
stu2.age = @100;
//更新数据
[context updatedObjects];
//保存
[context save:nil];
}
本文介绍如何使用CoreData进行数据持久化,并结合SQLite数据库实现数据的增删改查操作。主要内容包括配置CoreData环境、创建实体及字段、通过面向对象方式操作数据等。
383

被折叠的 条评论
为什么被折叠?



