CoreData简单使用

CoreData 是苹果官方提供的数据持久化框架,本质是一个基于对象关系映射(ORM)的数据库管理方案。它封装了底层存储细节(如 SQLite),开发者可通过面向对象的方式操作数据,无需编写 SQL 语句。

项目中使用了CoreData作为数据持久化,下面开始简单的介绍下如何创建实体、关系、以及关系的配置
1: 首先右键New File from Template ---> Core Data选择Data Model ---> Next 写个名字

Data Model

随便选一个

上面两个选哪个都一样,比如我创建了一个One的模型数据,在Xcode中会出现两个,不用管,关闭Xcode再打开就剩一个了,可能是Xcode的bug吧


关闭掉就没有了

2:界面内容

界面内容

2.1:Add Entity:表示添加一个实体表
Tips:实体表的命名首字母必须大写
2.2:为实体表创建一些属性,比如我给学生表创建了姓名、性别、年龄所对应的类型为String、Int16、Bool具体类型有这些:
自行了解

Relationships稍后介绍
2.3:
Codegen

2.3.1:
Manual/None:
含义:表示Xcode不会自动生成任何与实体对应的Swift(或Objective-C)类代码。
使用场景:当你需要完全手动创建或控制托管对象子类时选择此项。
Class Definition:
含义:Xcode会在编译时自动为每个实体生成一个完整的托管对象子类(.swift文件),但这些文件不出现在项目目录中(在Derived Data中生成,对开发者透明)。
使用场景:通常用于不需要在托管对象子类中添加太多自定义逻辑的情况。
Category/Extension:
含义:此选项会为每个实体生成一个类扩展(Swift中是Extension,Objective-C中是Category),其中只包含Core Data属性声明(@NSManaged),而类定义本身需要由开发者提供。
使用场景:当你想完全控制托管对象类的基类(比如使用自定义基类)或者在类中添加额外方法时比较有用。
我一般选择Manual/None,自己控制,需要通过Xcode菜单:Editor > Create NSManagedObject Subclass... 手动生成类文件。
Subclass

类文件

介绍下关系Relationships:
1.我创建了Student和Classroom两个实体。现实世界中一个教室对应多个学生,一个学生属于一个教室。立即了这种关系,也就明白了一个 Classroom 对应多个 Student,一个 Student 属于一个 Classroom
2.实体我们建立了,下面就需要建立关系了


Classroom

在Classroom实体中,添加一个关系,比如命名为“students”,选择目标(Destination)实体为Student。在关系属性中,Type将“To Many”勾选上(表示一个Classroom对应多个Student)


Student

在Student实体中,添加一个关系,比如命名为“classroom”,目标实体为Classroom。这个关系不需要勾选“To Many”(表示一个Student只属于一个Classroom)
3.设置关系的反向(Inverse)
在Classroom实体的students关系设置中,将Inverse设置为Student的classroom关系。
在Student实体的classroom关系设置中,将Inverse设置为Classroom的students关系。
这样,我们就建立了一对多关系,并且是双向关系。反向关系的设置很重要,它可以帮助Core Data自动维护关系的完整性。
再介绍下删除规则:

删除规则

Nullify(默认):当删除一个Classroom时,该Classroom下的所有Student的classroom关系会被设置为空(nil)。这样学生不会被删除,只是不再属于任何教室。
Cascade:当删除一个Classroom时,该Classroom下的所有Student也会被删除。
Deny:如果Classroom下还有Student,则不允许删除该Classroom,直到将关联的Student全部移除。
No Action:不做任何操作,需要手动维护。
根据需求,如果我们认为教室和学生是强关联的(教室不存在了,学生也应该不存在),可以使用Cascade;如果学生还可以独立存在,则使用Nullify。
我选择了Nullify。
相关代码:GitHub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容