iOS App开发中Core Data框架基本的数据管理功能小结

2020-01-15 15:58:23丽君

//实体名
@property (nullable, copy) NSString *name;
//设置是否是抽象实体
@property (getter=isAbstract) BOOL abstract;
//子类实体字典
@property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *subentitiesByName;
//所有子类实体对象数组
@property (strong) NSArray<NSEntityDescription *> *subentities;
//父类实体
@property (nullable, readonly, assign) NSEntityDescription *superentity;
//所有属性字典
@property (readonly, copy) NSDictionary<NSString *, __kindof NSPropertyDescription *> *propertiesByName;
//所有属性数组
@property (strong) NSArray<__kindof NSPropertyDescription *> *properties;
//所有常类型属性
@property (readonly, copy) NSDictionary<NSString *, NSAttributeDescription *> *attributesByName;
//所有关系
@property (readonly, copy) NSDictionary<NSString *, NSRelationshipDescription *> *relationshipsByName;
//某个实体类型的所有关系
- (NSArray<NSRelationshipDescription *> *)relationshipsWithDestinationEntity:(NSEntityDescription *)entity;
//判断是否是某种实体
- (BOOL)isKindOfEntity:(NSEntityDescription *)entity;
NSPropertyDescription类是数据模型属性的父类,NSAttributeDescription和NSRelationshipDescription都是继承于NSPropertyDescription类,NSAttributeDescription描述正常类型的属性,NSRelationshipDescription用于描述自定义类型的关系。

三、持久化存储协调者类NSPersistentStoreCoordinator

NSPersistentStoreCoordinator建立数据模型与本地文件或数据库之间的联系,通过它将本地数据读入内存或者将修改过的临时数据进行持久化的保存。其初始化与链接数据持久化接收对象方法如下:

//通过数据模型管理对象进行初始化
- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model;
//添加一个持久化的数据接收对象
- (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error;
//移除一个持久化的数据接收对象
- (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;

四、数据对象管理上下文NSManagedObjectContext

NSManagedObjectContext是进行数据管理的核心类,我们通过这个类来进行数据的增删改查等操作。其中常用方法如下:

//初始化方法 通过一个并发类型进行初始化 参数枚举如下:
/*
typedef NS_ENUM(NSUInteger, NSManagedObjectContextConcurrencyType) {
    NSPrivateQueueConcurrencyType  = 0x01,//上下文对象与私有队列关联
    NSMainQueueConcurrencyType   = 0x02//上下文对象与主队列关联