coredata 5分钟上手教程

iOS coredata 因学习曲线陡峭,所以用的人不多。
为啥陡峭?
因为coredata不走sql寻常路,自己全新搞了一套,我们忽然发现之前学的那些sql小技巧似乎都用不上了。
然后网上的教程都是东一坨西一坨的,看起来和盲人象差不多,看英文原版教程吧,发现自己的英文山寨四级水平大概只适合看hello world,只恨当年没有好好苦练英文。再加上iOS操作系统的版本不断升级,前人积累的经验显得更加碎片,给本来就一头雾水的同学平添更多难度。

因此特编写本文,仅适合从来没有接触过coredata,但是又想上手一试的同学,帮助大家在5分钟之内了解coredata的基本用法;

真经一句话,假言万卷书。

开始表演~

一、非常重要的前提

(1)仅适合iOS 10+,如果想看老版本下的兼容处理,本文不适合;
(2)仅适合从来没有接触过coredata,但是又想上手一试的同学,已经了解过的同学就请直接跳过吧,不要浪费生命;
(3)本文代码在xcode 12.4,iOS 10+ 环境测试通过;
(4)本文编写时间为2021年3月 ,如果你看到本文的时间与编写时间相距过于久远,建议也不要看了,因为随着技术的发展,这些文字对你来说可能已经是毒药了;

二、如何开始

在iOS中使用coredata的基本思路就是:
建立数据表模型-->创建对应的实体类-->针对实体类增删改查

2.1、建立数据表模型

用xcode提供的可视化工具创建数据表字段;
如下图所示:


WeChatf3349af0e36d57d9e8bc4aeeb7c921df.png

其中,

位置1

位置1的名字为:PackageModel.xcdatamodeld
可以把这个文件看作mysql中的一个schema(sqlserver里的一个数据库),或者sqlite里的一个数据库文件;
这个文件可以通过xcode>file>new>file>Core Data>Data Model 菜单操作来建立;
如下图:


WeChat08d05ff4b45afd9f7902bbcb0905e291.png

位置2

就看做数据表结构定义吧
在这里定义了2张数据表

位置3

指定数据表的字段名称和字段数据类型

位置4

表和表之间的主外键关联,比如1:1的就是To One,1:* 的就是To many

2.2、创建实体类文件

现在表定义好了,要开始定义和这些表结构对应的实体类文件了。
实体类文件可以自动生成;
方法如下:
(1)打开PackageModel.xcdatamodeld这个倒霉的数据库文件,
然后在打开的界面下通过xcode菜单来操作:
xcode > Editor > Create NSManagedObject Subclass,xcode会帮你在你自己指定的位置创建好对应的实体类文件;


12601614876564_.pic_hd.jpg

创建好的实体类的样子如下:


WeChat756a4b720a93b2dc0f7bf24a7e3d619f.png

2.3、开始编写代码,愉快的CRUD吧~

#import 
#import 

@interface AppManager : NSObject

@property(nonatomic) NSPersistentContainer *persistentContainer;


@end

......下面是.m文件里的内容

- (void)configDbModel {
    self.persistentContainer = [NSPersistentContainer persistentContainerWithName:@"PackageModel"];
    [self.persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * _Nonnull description, NSError * _Nullable error) {
        NSLog(@"error:%@",error.localizedDescription);
        
        //创建一个条新的空白记录,然后写点东西
        PackageMO *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:self.persistentContainer.viewContext];
        obj.packageId = 100;
        obj.packageName = @"我是一头猪";
        
        //保存到数据库里
        NSManagedObjectContext *context = self.persistentContainer.viewContext;
        NSError *errorSave = nil;
        [context save:&errorSave];
        
        //再读出来
        NSError *errorFetch = nil;
        NSFetchRequest *request = [PackageMO fetchRequest];
        NSArray *array = [context executeFetchRequest:request
                                           error:&errorFetch];
        for (PackageMO *p in array) {
                NSLog(@"%ld,%@",(long)p.packageId,p.packageName);
            }

    
    }];
    
}

//日志:
2021-03-05 01:06:31.297519+0800 MarketPromotion[5472:1638998] 100,我是一头猪

代码中,NSPersistentContainer 的实例是核心关键,就当作是前文中所述数据库的肉身管理器吧。
NSManagedObjectContext,也就是上面的代码中的self.persistentContainer.viewContext,就当作是NSPersistentContainer这个数据库肉身管理器的操作API吧。

NSFetchRequest 就当作sql里select语句的变身好了。

三、后记

coredata博大精深,这就是起了头,要想用的好,还是得多找更多高级的文档看看。我们就此别过,缘聚缘散,愿君码路之上一码平川~

你可能感兴趣的:(coredata 5分钟上手教程)