1.添加数据
添加数据的步骤: (1)获得工程中的模型数据的bundle路径 读取数据模型中的模型文件(2)确定要把数据存储到哪里(本地地址)(3)把工程中的数据模型中的数据 持久化存储到 本地 并绑定上下文 (4) 创建模型子类的对象,并完成赋值 (5)保存上下文
(1)获得工程中的模型数据的bundle路径 读取数据模型中的模型文件
NSURL *url = [[NSBundle mainBundle]URLForResource:modelName withExtension:@"momd"];
NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:url];
(2)确定要把数据存储到哪里(本地地址)
NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/mySQLite.db"];
(3)把工程中的数据模型中的数据 持久化存储到 本地 并绑定上下文
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:dataModel]; //把数据模型文件绑定给持久化协调器
NSURL *fileURL = [NSURL fileURLWithPath:filePath]; //指定持久化文件的存放位置
NSError *error = nil;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileURL options:nil error:&error]; //存储持久化文件到指定的位置
if (error) {
NSLog(@"数据持久化存储失败");
return;
}
_context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_context setPersistentStoreCoordinator:coordinator];//为数据持久化协调器绑定上下文(确定上下文操作的数据协调化文件)
(4)创建模型子类的对象,并完成赋值
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName: @"Person"inManagedObjectContext:_context];
person.name = @"刘4";
person.age = @5;
person.personId = @41138;
(5)保存上下文
BOOL isSuc = [_context save:nil];
if (!isSuc) {
NSLog(@"数据存储失败");
}
2.查询数据
查询数据的步骤: (1)创建查询请求 (2)设置查询的实体 (3)设置查询条件 (4)查询数据
(1)创建查询请求
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName: @"Person"];
(2)设置查询的实体
request.entity = [NSEntityDescription entityForName:@"Person"inManagedObjectContext:_context];
(3)设置查询条件
NSString *require = @"age < 10 “;
request.predicate = [NSPredicate predicateWithFormat:require];
(4)查询数据
NSArray *arr = [_context executeFetchRequest:request error:nil];
for (Person *per in arr) {
NSLog(@"%@",per.name);
}
3.删除数据
删除数据的步骤: (1)确定要删除的数据(2)执行删除
(1)确定要删除的数据
这一步可以类似于查询操作,根据查询条件,确定要删除的数据
(2)执行删除
[_context deleteObject:object]; //object是 NSManagedObject类型的
以上操作比较繁琐,有些操作被重复执行,可以封装成方法:
1.根据传入的名字(类名)获取要保存的实体
-(NSManagedObject *)getObjectForName:(NSString *)EntityName{
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:EntityName inManagedObjectContext:_context];
return object;
}
2.把工程中的数据模型中的数据 持久化存储到 本地 并绑定上下文
-(void)saveModelData:(NSString *)modelName toPath:(NSString *)filePath{
//1.读取数据模型中的模型文件
NSURL *url = [[NSBundle mainBundle]URLForResource:modelName withExtension:@"momd"];
NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:url];
//2.创建持久化数据文件
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:dataModel]; //把数据模型文件绑定给持久化协调器
NSURL *fileURL = [NSURL fileURLWithPath:filePath]; //指定持久化文件的存放位置
NSError *error = nil;
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileURL options:nil error:&error]; //存储持久化文件到指定的位置
if (error) {
NSLog(@"数据持久化存储失败");
return;
}
//为数据持久化协调器绑定上下文(确定上下文操作的数据协调化文件)
_context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_context setPersistentStoreCoordinator:coordinator];
}
3.保存上下文
-(void)saveContext{
BOOL isSuc = [_context save:nil];
if (!isSuc) {
NSLog(@"数据存储失败");
}
}
4.根据指定的条件 从指定的名字(子类名)中查询数据
-(NSArray *)selectDataWithRequirement:(NSString *)require from:(NSString *)entityName{
//1.创建查询请求
NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:entityName];
//设置分页查询
// request.fetchLimit = 10;//每次查询数据条数
// request.fetchOffset = 3;//从第几个开始查询
//2.设置查询的实体
request.entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:_context];
//3.设置查询条件
request.predicate = [NSPredicate predicateWithFormat:require];
//4.查询数据
NSArray *arr = [_context executeFetchRequest:request error:nil];
return arr;
}
5.根据指定的条件 从指定的名字(子类名)中删除数据
-(void)deleteWithRequireObject:(NSManagedObject *)object from:(NSString *)entityName{
[_context deleteObject:object];
[self saveContext];
}
CoreData功能封装
原文:http://www.cnblogs.com/zh-li/p/5146820.html