CoreData功能封装

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];


}

 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/zh-li/p/5146820.html