iOS中CoreData数据管理系列二——CoreData框架中三个重要的类-阿里云开发者社区

开发者社区> 珲yy少> 正文

iOS中CoreData数据管理系列二——CoreData框架中三个重要的类

简介: iOS中CoreData数据管理系列二——CoreData框架中三个重要的类
+关注继续查看



一、引言


   在上一篇博客中,介绍了iOS中使用CoreData框架设计数据模型的相关步骤。CoreData框架中通过相关的类将数据——数据模型——开发者无缝的衔接起来。NSManagedObjectModel对应数据模型,即上篇博客中我们创建的.xcdatamodeld文件;NSPersistentStoreCoordinator相当于数据库与数据模型之间的桥接器,通过NSPersistentStoreCoordinator将数据模型存入数据库;NSManagedObjectContext是核心的数据管理类,开发者通过操作它来执行对数据的相关操作。


二、数据模型管理类NSManagedObjectModel


   通过NSManagedObjectModel,可以将创建的数据模型文件读取为模型管理类对象,使用如下方法:


   //获取.xcdatamodeld文件url

   NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"];

   //读取文件

   NSManagedObjectModel * mom = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl];

其中还有一些属性和方法进行数据模型的管理:


//将多个数据模型管理文件进行合并

+ (nullable NSManagedObjectModel *)mergedModelFromBundles:(nullable NSArray<NSBundle *> *)bundles;  

//将多个数据模型管理类对象进行合并

+ (nullable NSManagedObjectModel *)modelByMergingModels:(nullable NSArray<NSManagedObjectModel *> *)models;

//存放数据中所有实体模型的字典 字典中是实体名和实体描述对象

@property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *entitiesByName;

//存放数据中所有实体描述对象

@property (strong) NSArray<NSEntityDescription *> *entities;

//返回所有可用的配置名称

@property (readonly, strong) NSArray<NSString *> *configurations;

//获取关联某个配置的所有实体

- (nullable NSArray<NSEntityDescription *> *)entitiesForConfiguration:(nullable NSString *)configuration;

//为某个实体关联配置

- (void)setEntities:(NSArray<NSEntityDescription *> *)entities forConfiguration:(NSString *)configuration;

//创建请求模板

- (void)setFetchRequestTemplate:(nullable NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name;

//获取请求模板

- (nullable NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name;

关于实体描述对象NSEntityDescription:


实体类似于数据库中的表结构,例如上次我们创建的班级实体模型,一个实体模型中可以添加许多属性与关系,NSEntityDescription对象中存放这些信息,常用如下:


//实体所在的模型管理对象

@property (readonly, assign) NSManagedObjectModel *managedObjectModel;

//实体所在的模型管理对象的名称

@property (null_resettable, copy) NSString *managedObjectClassName;

//实体名

@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//上下文对象与主队列关联

};

*/

- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct;

//异步执行block

- (void)performBlock:(void (^)())block;

//同步执行block

- (void)performBlockAndWait:(void (^)())block;

//关联数据持久化对象

@property (nullable, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

//是否有未提交的更改

@property (nonatomic, readonly) BOOL hasChanges;

//进行查询数据请求

- (nullable NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error;

//进行查询数据条数请求

- (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error ;

//插入元素

- (void)insertObject:(NSManagedObject *)object;

//删除元素

- (void)deleteObject:(NSManagedObject *)object;

//回滚一步操作

- (void)undo;

//清楚缓存

- (void)reset;

//还原数据

- (void)rollback;

//提交保存数据

- (BOOL)save:(NSError **)error;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS中CoreData数据管理系列三——添加与查询数据
iOS中CoreData数据管理系列三——添加与查询数据
26 0
Linux USB Host-Controller的初始化代码框架分析【转】
转自:http://blog.csdn.net/zkami/article/details/2496770 usb_hcd_omap_probe (const struct hc_driver *driver) (dev/ohci/ohci-omap.
821 0
快速搭建基于 Serverless 的 .NET Core 数据库应用
快速搭建基于 Serverless 的 .NET Core 数据库应用 简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。
20055 0
EDA:最简单的自然语言处理数据增广方法
数据增广常用于计算机视觉。
185 0
从 0 到 1 通过 Flink + Tablestore 进行大数据处理与分析
阿里云实时计算Flink版是一套基于 Apache Flink 构建的⼀站式实时大数据分析平台。在大数据场景下,实时计算 Flink 可提供端到端亚秒级实时数据流批处理能力。表格存储 Tablestore (又名 OTS)是阿里云自研的多模型结构化数据存储,可提供海量结构化数据的存储、查询分析服务。表格存储的双引擎架构支持千万TPS和毫秒级延迟的服务能力,可作为大数据计算的极佳上下游存储。
340 0
+关注
594
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载