zoukankan      html  css  js  c++  java
  • 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];


    }

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    CDB命令方式创建和删除
    cdb和pdb的启停
    python 读取blob
    c# 读取blob数据
    python 为什么没有自增自减符
    程序异常重启代码
    便捷辅助开发工具
    正则表达式带例子详解
    名语中看代码
    c# 画一个报告
  • 原文地址:https://www.cnblogs.com/zh-li/p/5146820.html
Copyright © 2011-2022 走看看