这几天想仔细的学习一下CoreData的部分,网络上有很多的资料。看完之后把第一部分基础重点用几张图表示,希望帮助别人能更快的理解。
1.什么是CoreData
Core Data本身既不是数据库也不是数据库访问框架,而是一个完整的数据模型解决方案。可以理解为对持久层的封装,使得我们可以通过可视化建立数据模型,不仅支持SQLite数据库,还能对XML文件、二进制文件、用户自定义文件进行操作。
2.几大重点属性
其实之前说了CoreData是对持久层的一个封装,以sqlite数据库理解:
NSManagedObjectContext 是对数据库数据操作的手柄,封装了我们理解的增删改查。需要注意的一点就是:在我们做任何操作的时候,其实都是把操作缓存在内存中,直到我们调用save方法的时候,才会映射到持久层。
NSManagedObjectModel类似于数据库的轮廓,包括了数据库内部各个实体的定义信息。
NSPresistentStoreCoordinator类似于数据库的外部处理器,包括设置数据存储的名字和位置,数据存储的时机。
理解了三者都是做什么的,都很好理解三者的创建顺序:
3 可视化界面
创建一个实体
其中属性里面type类型,从网上找到相关的资料:
Undefined: 默认值,参与编译会报错
Integer 16: 整数,表示范围 -32768 ~ 32767
Integer 32: 整数,表示范围 -2147483648 ~ 2147483647
Integer 64: 整数,表示范围 –9223372036854775808 ~ 9223372036854775807
Float: 小数,通过MAXFLOAT宏定义来看,最大值用科学计数法表示是 0x1.fffffep+127f
Double: 小数,小数位比Float更精确,表示范围更大
String: 字符串,用NSString表示
Boolean: 布尔值,用NSNumber表示
Date: 时间,用NSDate表示
Binary Data: 二进制,用NSData表示
Transformable: OC对象,用id表示。可以在创建托管对象类文件后,手动改为对应的OC类名。使用的前提是,这个OC对象必须遵守并实现NSCoding协议
一个属性的创建
4 注意点
1)对于一个创建的CoreData工程,里面有一个.xcdatamodeled模板文件,在编译之后会产生两个文件:
一个放在document文件夹下的sqlite文件:
一个放在mainBundle路径下的:
2)增删改查
增:创建一个实体,然后交给context上下文处理:
删改查:先找到你想要删或改的实体,然后进行操作,最后交给context上下文处理:
一定要在操作之后进行save操作,不然所有的操作结果都只是在缓存中,没有进入持久层:
我想这也是为什么我们在保存一个oc对象的时候,需要该对象遵循NSCoding协议。
3) 实体间的关系
两个实体:Employee和Department
在创建的时候,有一个问题:
需要双向设置吗?
不需要,当我设置了[department addEmployeeObject:employee];的时候,coredata会自动的实现下面的语句,最后employee.department的打印结果如下:
第一篇简单的解释了一下我理解的CoreData的基础信息,想要了解更多的话可以参考: