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];
    }
}
原文地址:https://www.cnblogs.com/moxuexiaotong/p/4850818.html