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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介:

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选项,在弹出的窗口中勾选要类化的实体,如下图:

151849_9YTv_2340880.png152012_iWai_2340880.png

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

三、创建一条数据

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
     //读取数据模型文件
     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中常用方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//创建一个实体的查询请求 可以理解为在某个表中进行查询
+ (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实体中查询数据,使用如下的代码:

?
1
2
3
4
5
6
7
     //创建一条查询请求
     NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@ "SchoolClass" ];
     //设置条件为 stuNum=60的数据
     [request setPredicate:[NSPredicate predicateWithFormat:@ "stuNum == 60" ]];
     //进行查询操作
     NSArray * res = [moc executeFetchRequest:request error:nil];
     NSLog(@ "%@" ,[res.firstObject stuNum]);


目录
相关文章
|
1月前
|
Web App开发 缓存 数据库
DMS产品常见问题之DMS数据规定失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
3月前
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
47 0
|
4月前
|
数据管理 数据库 数据安全/隐私保护
数据管理与持久化:深度解析Docker数据卷
Docker 数据卷在容器化应用中扮演着关键角色,它们提供了一种灵活且可持久化的方式来处理应用数据。本文将深入讨论 Docker 数据卷的基本概念、使用方法以及一系列高级应用场景,通过更为丰富和实际的示例代码,帮助大家全面掌握数据卷的使用和管理。
|
7天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据&quot;瘦身&quot;;热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的&quot;透视&quot;工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
14天前
|
人工智能 安全 数据处理
首次全国数据工作会议召开,数据管理体制建设迈上新台阶
首次全国数据工作会议召开,数据管理体制建设迈上新台阶
24 1
|
1月前
|
SQL 数据采集 存储
数据仓库(12)数据治理之数仓数据管理实践心得
这边文章聊聊自己对数据治理开发实践的一些思路,就是聊聊怎么开始去做数据治理这件事情。说起数据治理,有时候虽然看了很多文章,看了很多的介绍,了解数据治理的理论,但是实际上需要我们去搞的时候,就会踩很多的坑。这里记一下自己做数据治理的一些思路,做做笔记,也分享给需要的同学。 当然,想要做数据治理,想要学习了解,一下数据治理的范围,理论等,最好可以看看别人怎么做的,了解数据治理可以参考:[数据仓库(11)什么是大数据治理,数据治理的范围是哪些](https://zhuanlan.zhihu.com/p/467433967)。
305 0
|
3月前
|
Web App开发 网络安全 Android开发
🚀2023最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包
在移动应用程序的开发中,了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法,可以让我们分析应用程序的网络请求和响应,了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具,可以帮助我们在 Android 和 iOS 平台上进行数据抓包。本篇博客将介绍如何使用克魔助手在 iOS 平台上进行数据抓包。
|
3月前
|
存储 数据管理 数据挖掘
数据管理DMS:构建高效数据生态的关键
数据管理DMS:构建高效数据生态的关键