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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: 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;

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
2月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
249 60
|
1月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
127 66
|
2月前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
3月前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
77 5
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
3月前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
66 1
|
4月前
|
Swift iOS开发
6-7|IOS如何定义一个类
6-7|IOS如何定义一个类
|
2月前
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
5月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
141 1
|
6月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。

热门文章

最新文章