CoreData“增删改查”

时间:北京时间20:54

关于CoreData,我们首先要说的就是他的三个结构managedObjectContext,managedObjectModel,persistentStoreCoordinator

其实我个人认为他们三个的结构顺序是这样的:managedObjectContext --> persistentStoreCoordinator --> managedObjectModel

对以上的顺序做个解释

✅:在创建managedObjectContext的时候,我们需要确定上下文操作的是哪个数据库,这里就是关系到持久话助理了,所以在创建上下文的时候,我们要

[_managedObjectContext setPersistentStoreCoordinator:coordinator];


✅:在创建persistentStoreCoordinator的时候,我们要知道存储的数据模型的数据格式,相当于要知道是对哪张表操作,所以我们要

_persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
然后是把数据真正存储进数据库里面,所以我们要创建数据库,用以存放我们刚才创建的表Model,跟底层交汇的代码。

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

}

✅:在创建managedObjectModel的时候,我们需要知道TestForCoreData.xcdatamodeld的名字就可以,找到URL,然后返回

_managedObjectModel
NSURL *modelURL = [[NSBundlemainBundle] URLForResource:@"TestForCoreData"withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModelalloc] initWithContentsOfURL:modelURL];


managedObjectContext:这是一个提供给用户操作的层,用户可以在这个层面上对存储做增,删,改,查的操作,其实在执行Save之前,都没有存进数据库。

if(![context save:&error]){
        
        NSLog(@"Can't Save");
    }

所以每次在对存储数据进行操作的时候,我们要做的第一件事情就是获取上下文Context对象。下面我们来介绍以下CoreData里面的增删改查。

CoreData增删改查:

1⃣️增:往实体ContactInfo增加一条表数据,首先要创建一个NSManageObject对象和获取Context对象,表示往表里面增加一条数据

NSManagedObjectContext *context = [self managedObjectContext];
    
    NSManagedObject *contactInfo = [NSEntityDescription insertNewObjectForEntityForName:@"ContactInfo" inManagedObjectContext:context];
    [contactInfo setValue:@"name B" forKey:@"name"];
    [contactInfo setValue:@"age = 25" forKey:@"age"];
    [contactInfo setValue:@"birthday = 1990" forKey:@"birthday"];

NSError *error;
    if(![context save:&error]){
        
        NSLog(@"Can't Save Data right now!");
    }

2⃣️查:因为删除和修改的话,都是在查找到之后的操作,所以把查提前讲解。查除了需要Context之外,还需要 NSFetchRequest(查找条件) 对象,需要制定是查找那个实体,当用户执行完了 executeFetchRequest之后,会以数组的形式返回当前查找的结果,我们查看其中的属性(表中的属性)即可

    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ContactInfo" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSError *error;
    NSArray *fetchedObject = [context executeFetchRequest:fetchRequest error:&error];
    for(NSManagedObject *info in fetchedObject){
        
        NSLog(@"Info_name : %@",[info valueForKey:@"name"]);
        NSLog(@"Info_age : %@",[info valueForKey:@"age"]);
        
    }

3⃣️删:删除之前,我们先要查找到需要删除的对象,先执行查找,基本和上面是一样的

NSManagedObjectContext *context = [self managedObjectContext];
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ContactInfo" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSError *error;
    NSArray *fetchedObject = [context executeFetchRequest:fetchRequest error:&error];
然后开始执行删除代码:

if(!([fetchedObject count] == 0)){
        
       [context deleteObject:[fetchedObject lastObject]];
    }
最后是将做过删除后的操作的数据进行存储:

if(![context save:&error]){
        
        NSLog(@"Can't Save Data right now!");
    }

4⃣️改:改也是在查的基础之上的操作,我们先要查找到需要被修改的object,然后用KVC对他的数据进行修改即可,先查找:
    NSManagedObjectContext *context = [self managedObjectContext];
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ContactInfo" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSError *error;
    NSArray *fetchedObject = [context executeFetchRequest:fetchRequest error:&error];
然后就是对其中的一项object进行修改:

[[fetchedObject objectAtIndex:0] setValue:@"50" forKey:@"age"];
    
[[fetchedObject objectAtIndex:0] setValue:@"Vicent" forKey:@"name"];
最后同样是对更新后的数据进行存储:

if(![context save:&error]){
        
    NSLog(@"Can't Save");
}
觉得受用的请留下一个“赞”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值