iOS coreData的使用

创建模型

1 创建.xcdatamodeld文件
请添加图片描述

2 添加entity, 并设置属性
请添加图片描述

3 create NSManagedObject Subclass ,如图
请添加图片描述

获取coredata 操作上下文环境

+ (NSManagedObjectContext *)coredatagetContext {
    
    
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
    //根据模型文件创建模型对象
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    
    
    //2、创建持久化存储助理:数据库
    //利用模型对象创建助理对象
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
    
    //数据库的名称和路径
    NSString *docStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *sqlPath = [docStr stringByAppendingPathComponent:@"coreData.sqlite"];
    NSLog(@"数据库 path = %@", sqlPath);
    NSURL *sqlUrl = [NSURL fileURLWithPath:sqlPath];
    
    NSError *error = nil;
    //设置数据库相关信息 添加一个持久化存储库并设置存储类型和路径,NSSQLiteStoreType:SQLite作为存储库
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqlUrl options:@{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES} error:&error];
    
    if (error) {
        NSLog(@"添加数据库失败:%@",error);
    } else {
        NSLog(@"添加数据库成功");
    }
    
    //3、创建上下文 保存信息 操作数据库
    
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    
    //关联持久化助理
    context.persistentStoreCoordinator = store;
    return context;
   // _context = context;
}

基本操作

写入

+ (void)coreUpdateWithName:(NSString *)name gender:(NSString *)gender
{
        NSManagedObjectContext *context = [self  coredatagetContext];
        
        NSArray *array = [self coreDatagetStudent];
        
        BOOL add = YES;
        for (Student *person in array) {
            if ([person.name isEqualToString:NAME]) {
                add = NO;
                break;
            }
        }
        if (add == NO) {
            return;
        }
        
        Student *student = [NSEntityDescription
                             insertNewObjectForEntityForName:@"Student"
                             inManagedObjectContext:context];
   		 student.name = name;
    	student.gender = gender;
  
        //   3.保存插入的数据
        NSError *error = nil;
        if ([context save:&error]) {
            NSLog(@"掺入成年公插入成功弄");
            
            NSArray * array = [MyTool coreDatagetStudent];
            NSLog(@"插入后拆入喉%@",array);
                }else{
            NSLog(@"插入失败插入失败");
        }
     
}

查询

+ (NSArray *)coreDatagetStudent
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    NSManagedObjectContext *context = [self  coredatagetContext];
    NSArray *resArray = [context executeFetchRequest:request error:nil];
    return resArray;
}

修改

   NSManagedObjectContext *context = [self  coredatagetContext];
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
    
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@", name];
    request.predicate = pre;
    
    //发送请求
    NSArray *resArray = [context executeFetchRequest:request error:nil];
    
    //修改
    for (Student *stu in resArray) {
        stu.account = account;
    }
  
    //保存
    NSError *error = nil;
    if ([context save:&error]) {
        NSLog(@"更改成功饿");
//        [self alertViewWithMessage:@"更新所有帅哥的的名字为“且行且珍惜_iOS”"];
    }else{
       // NSLog(@"更新数据失败, %@", error);
    }

常见的问题

1 使用 editor -> Create NSManagedObject Subclass 方式创建 文件的时候,
默认创建的是swift 文件
请添加图片描述

如图
请添加图片描述

如果我们使用的是oc语言,则可以自己创建该类文件请添加图片描述

但是,当我们运行的时候发现是有重复文件的
请添加图片描述
原因是虽然我们删除了通过editor 创建的 文件,当时Xcode 已经默认为我们添加了,
切会记录,所以删除是无效的
解决方法就是新建一个entit y,然后 然后直接创建一个和entiry 类名相同的NSManagedObject 类 (不要通过editor 创建)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值