iOS中CoreData数据管理系列三——添加与查询数据

简介: iOS中CoreData数据管理系列三——添加与查询数据

iOS中CoreData数据管理系列三——添加与查询数据


一、引言


   在前两篇博客中,分别介绍了iOS中CoreData框架创建数据模型和CoreData框架中的三个核心类。博客地址如下:


iOS中CoreData框架简介:http://my.oschina.net/u/2340880/blog/610488


CoreData框架中三个核心的类:http://my.oschina.net/u/2340880/blog/610948


本篇博客将综合使用三个核心的类,进行数据创建和查询的操作介绍。


二、建立数据对象类


   前面博客介绍的NSManagedObjectModel是数据管理模型,可以将其类比如数据库,NSManagedObjectModel中存放着数据库的结构信息。NSEntityDescription是实体描述对象,它可以类比如数据库中的表,NSEntityDescription存放的是表的结构信息。这些类都是一些抽象的结构类,并不存储实际每条数据的信息,具体的数据由NSManagedObject类来描述,我们一般会将实体类化继承于NSManagedObject。


   Xocde工具提供了快捷的实体类化功能,还拿我们一开始创建的班级与学生实体来演示,点击.xcdatamodeld文件,点击Xcode工具上方导航栏的Editor标签,选择Creat NSManagedObject Subclass选项,在弹出的窗口中勾选要类化的实体,如下图:

image.png



这时,Xcode会自动为我们创建一个文件,这些文件中有各个类中属性的声明。


三、创建一条数据


   使用如下代码进行数据的创建:


   //读取数据模型文件

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

   //创建数据模型

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

   //创建持久化存储协调者

   NSPersistentStoreCoordinator * psc = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:mom];

   //数据库保存路径

   NSURL * path =[NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"CoreDataExample.sqlite"]];

   //为持久化协调者添加一个数据接收栈

   /*

   可以支持的类型如下:

    NSString * const NSSQLiteStoreType;//sqlite

    NSString * const NSXMLStoreType;//XML

    NSString * const NSBinaryStoreType;//二进制

    NSString * const NSInMemoryStoreType;//内存

   */

   [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:path options:nil error:nil];

   //创建数据管理上下文

   NSManagedObjectContext * moc = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];

   //关联持久化协调者

   [moc setPersistentStoreCoordinator:psc];

   //创建数据对象

   /*

   数据对象的创建是通过实体名获取到的

   */

   SchoolClass * modelS = [NSEntityDescription insertNewObjectForEntityForName:@"SchoolClass" inManagedObjectContext:moc];

   //对数据进行设置

   modelS.name = @"第一班";

   modelS.stuNum = @60;

   //进行存储

   if ([moc save:nil]) {

       NSLog(@"新增成功");

   }

   NSLog(@"%@",[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"CoreDataExample.sqlite"]);

找到在打印出的路径,会发现里面多了一个sqlite文件,其中有一张表中添加进了一条数据。


四、查询数据


   CoreData中通过查询请求来对数据进行查询操作,查询请求由NSFetchRequest来进行管理和维护。


   NSFetchRequest主要提供两个方面的查询服务:


   1.提供范围查询的相关功能


   2.提供查询结果返回类型与排序的相关功能


   NSFetchRequest中常用方法如下:


//创建一个实体的查询请求 可以理解为在某个表中进行查询

+ (instancetype)fetchRequestWithEntityName:(NSString*)entityName;

//查询条件

@property (nullable, nonatomic, strong) NSPredicate *predicate;

//数据排序

@property (nullable, nonatomic, strong) NSArray<NSSortDescriptor *> *sortDescriptors;

//每次查询返回的数据条数

@property (nonatomic) NSUInteger fetchLimit;

//设置查询到数据的返回类型

/*

typedef NS_OPTIONS(NSUInteger, NSFetchRequestResultType) {

   NSManagedObjectResultType  = 0x00,

   NSManagedObjectIDResultType  = 0x01,

   NSDictionaryResultType          NS_ENUM_AVAILABLE(10_6,3_0) = 0x02,

NSCountResultType    NS_ENUM_AVAILABLE(10_6,3_0) = 0x04

};

*/

@property (nonatomic) NSFetchRequestResultType resultType;

//设置查询结果是否包含子实体

@property (nonatomic) BOOL includesSubentities;

//设置要查询的属性值

@property (nullable, nonatomic, copy) NSArray *propertiesToFetch;

在SchoolClass实体中查询数据,使用如下的代码:


   //创建一条查询请求

   NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"SchoolClass"];

   //设置条件为 stuNum=60的数据

   [request setPredicate:[NSPredicate predicateWithFormat:@"stuNum == 60"]];

   //进行查询操作

   NSArray * res = [moc executeFetchRequest:request error:nil];

   NSLog(@"%@",[res.firstObject stuNum]);

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1353 4
|
4月前
|
数据采集 存储 安全
数据治理≠数据管理!90%的企业都搞错了重点!
在数字化转型中,数据不一致、质量差、安全隐患等问题困扰企业。许多组织跳过基础的数据管理,直接进行数据治理,导致方案难以落地。数据管理涵盖数据生命周期中的采集、存储、处理等关键环节,决定了数据是否可用、可靠。本文详解数据管理的四大核心模块——数据质量、元数据、主数据与数据安全,并提供构建数据管理体系的四个阶段:评估现状、确定优先级、建立基础能力与持续改进,助力企业夯实数据基础,推动治理落地。
|
8月前
|
存储 数据管理 数据格式
数据治理 vs. 数据管理:别再傻傻分不清!
数据治理 vs. 数据管理:别再傻傻分不清!
467 10
|
4月前
|
数据采集 存储 SQL
数据管理四部曲:元数据管理、数据整合、数据治理、数据质量管控
老张带你搞定企业数据管理难题!数据找不到、看不懂、用不好?关键在于打好元数据管理、数据整合、数据治理和数据质量管控四大基础。四部曲环环相扣,助你打通数据孤岛,提升数据价值,实现精准决策与业务增长。
数据管理四部曲:元数据管理、数据整合、数据治理、数据质量管控
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
6月前
|
数据采集 人工智能 监控
企业数据来源杂、质量差,如何通过主数据管理解决?如何确保数据可信、一致和可用?
本文三桥君系统介绍了主数据管理(MDM)在企业数字化转型中的关键作用。产品专家三桥君从数据清洗、治理、处理到流转四个维度,详细阐述了如何通过标准化流程将数据转化为企业核心资产。重点包括:数据清洗的方法与工具应用;数据治理的组织保障与制度设计;数据处理的三大核心动作;以及数据流转的三种模式与安全控制。专家三桥君强调主数据管理能够推动企业从"经验决策"转向"数据驱动",并提出构建统一数据服务网关、"数据血缘图谱"等实战建议,为企业数字化转型提供系统化解决方案。
270 0
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
存储 人工智能 安全
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
瓴羊Dataphin连续俩年获得DAMA年度优秀数据治理产品奖,本次与DAMA联合发布“DAMA x 瓴羊 数据管理技能认证”,助力提升全民数据素养。
648 0
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
|
数据采集 安全 数据管理
通信行业数据治理:如何实现高效、安全的数据管理?
在未来的发展中,通信行业的企业应加强数据治理意识,提高数据治理能力;同时,积极开展跨行业的合作创新,共同推动行业的繁荣与发展。相信在不久的将来,通信行业将迎来更加美好的明天。

热门文章

最新文章