zoukankan      html  css  js  c++  java
  • CoreData的基础知识

    1.CoreData的专业术语

      NSManagerModel   被管理的数据模型
      NSManngerObject   被管理的数据对象
      NSPersistentStoreCoordinator   持久化存储助理
      NSManagerContext   被管理的数据的上下文
      NSEntityDspcipition   实体结构(相当于表格结构)
      NSFetchRequest   获得数据的请求
      NSPredicate   谓词(筛选数据)
      后缀为.xcdatamodeld的包   编译后为.momd或.mom文件

     

     

     

     

     

     

     

     

    2.手动创建CoreData的步骤:

     (1).在target找到build phases中link binary with libraries条目。添加coredata.framework。

     (2).新建一个new file,在coredata中找到data model,建立。

     (3).在appdelegate.h中引入头文件

    3.依赖关系

    4.手动添加CoreData

    -(NSManagedObjectContext *)getContext
    {
        //初始化一个数据模型,
        NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
        //初始化一个持久化存储助理并关连数据模型
        NSPersistentStoreCoordinator *coor = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
        //创建数据存储路径,将sqlite数据库放置在沙盒目录的document文件夹下
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
        NSString *pathfile = [path stringByAppendingPathComponent:@"coredata.sqlite"];
        NSURL *url = [NSURL fileURLWithPath:pathfile];
        //将路径交给持久化存储助理,让它来建立数据库
        [coor addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];
        //初始化数据对象上下文并关连存储助理,完成增删改查的操作
        NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
        [context setPersistentStoreCoordinator:coor];
       
        return context;
    }

    这样我们就可以使用CoreData了,只需要了解了它们之间的依赖关系,便能很方便轻松的添加一个CoreData。

     5.插入数据

    在CoreData中插入数据首先需要在模型文件中建立表和属性。表的名称首字母必须大写。

    然后

    -(void)insetData
    {
        NSManagedObject *user = [NSEntityDescription insertNewObjectForEntityForName:@"Human" inManagedObjectContext:_context];//得到表的名称
        [user setValue:@"moxue" forKey:@"name"];//设置表中的属性值
        [user setValue:@10.0 forKey:@"age"];
           BOOL choose = [_context save:nil];//保存并判断是否插入成功
        if (choose) {
            NSLog(@"insert success");
        }else{
            NSLog(@"insert failed");
        }
    }

    6.查看添加的数据

    -(void)fetchData
    {
        NSFetchRequest *fetch = [[NSFetchRequest alloc]init];//获得数据请求
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context];//得到对应的表
        
        [fetch setEntity:entity];//添加表到请求中
        
        NSArray *array = [_context executeFetchRequest:fetch error:nil];//得到数据数组并遍历
        for (NSManagedObject *object in array) {
            NSLog(@"%@",[object valueForKey:@"age"]);
        }
    }

    7.修改添加的数据

    -(void)updateData
    {
        //通过查看先得到要修改的数据
        NSFetchRequest *fetch = [[NSFetchRequest alloc]init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context];
        //通过谓词来精确定位数据
        NSPredicate *condition = [NSPredicate predicateWithFormat:@"name = 'moxue'"];
        [fetch setPredicate:condition];
        [fetch setEntity:entity];
        //遍历数组并修改
        NSArray *array = [_context executeFetchRequest:fetch error:nil];
        for (NSManagedObject *object in array) {
            [object setValue:@28 forKey:@"age"];
        }
        [_context save:nil];//保存
    }

    8.删除数据

    -(void)deleteData
    {
        //首先查看数据
        NSFetchRequest *fetch = [[NSFetchRequest alloc]init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Human" inManagedObjectContext:_context];
        [fetch setEntity:entity];
        //通过谓词条件来筛选
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = '10'"];
        [fetch setPredicate:predicate];
        //删除得到的数据并保存
        NSArray *array = [_context executeFetchRequest:fetch error:nil];
        for (NSManagedObject *object in array) {
                [_context deleteObject:object];
                [_context save:nil];
        }
    }
  • 相关阅读:
    安全学习工具和研究途径整理分享
    白帽黑客:如何用总裁的座机给你打的电话!
    渗透某公众号思路分享
    Exploit之初识Linux下缓冲区溢出
    应用密码学之从零开始③-密码学的数学基础其一
    关于finecms v5 会员头像 任意文件上传漏洞分析
    日志分析与splunk浅谈
    mbed试玩—高速开发MCU应用(基于FRDM-KL25Z)
    在DevExpress GridControl的一列中显示图片
    【BLE】CC2541之自己定义长短按键
  • 原文地址:https://www.cnblogs.com/moxuexiaotong/p/4850818.html
Copyright © 2011-2022 走看看