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

这时,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]);

时间: 2024-09-17 04:21:19

iOS中CoreData数据管理系列三——添加与查询数据的相关文章

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

iOS中CoreData数据管理系列二--CoreData框架中三个重要的类 一.引言     在上一篇博客中,介绍了iOS中使用CoreData框架设计数据模型的相关步骤.CoreData框架中通过相关的类将数据--数据模型--开发者无缝的衔接起来.NSManagedObjectModel对应数据模型,即上篇博客中我们创建的.xcdatamodeld文件:NSPersistentStoreCoordinator相当于数据库与数据模型之间的桥接器,通过NSPersistentStoreCoord

iOS中CoreData数据管理系列四——进行数据与页面的绑定

iOS中CoreData数据管理系列四--进行数据与页面的绑定 一.引言     在上一篇博客中,我们讨论了CoreData框架中添加与查询数据的操作,事实上,在大多数情况下,这些数据都是由一个UITableView表视图进行展示的,因此,CoreData框架中还未开发者提供了一个类NSFetchedResultsController,这个类作为桥接,将视图与数据进行绑定. 添加与查询数据操作:http://my.oschina.net/u/2340880/blog/611430. 二.进行数据

iOS中CoreData数据管理系列一——初识CoreData

iOS中CoreData数据管理系列一--初识CoreData 一.何为CoreData     CoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型     在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL

mysql 数据库-mysql问题:从三个表查询数据优化

问题描述 mysql问题:从三个表查询数据优化 我有三个表,三个表的数据全部查询出来再排序,三个表的数据都很大,如何查询才能最节省资源,最优. 解决方案 可以建一个视图,把你经常要用到的字段放入视图中,当然和你的查询语句也有关系 解决方案二: 楼上说的建视图,有点换汤不换药吧! 大数据量查询,建议去看看索引方面的东西吧

iOS中的图像处理(三)——混合运算

有时候,单独对一张图像进行处理是很难或者根本达不到我们想要的效果的.一个好的滤镜效果的诞生,往往要经过很多复杂步骤.细致微调.图片应用效果观察以及很多图层叠加. 我在JSWidget上发现了一些常用混合算法,对应着一些常用混合模式,通过这些blend modes,我们可以指定两张图像如何混合. 不过在此之前,我们需要纯颜色图像和渐变图像来做辅助: + (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size { // http://

xcode-如何设置ios中的UIPickerView?

问题描述 如何设置ios中的UIPickerView? 目前需要添加一个PickerView,但是运行之后只有黑屏,不知道问题出在哪里? UIPickerView *myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; [self.view addSubview:myPickerView]; 谢谢指点. 解决方案 用UIPickerViewDataSource方法: – numberOfCo

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询.     1.先看一段正常的SQL语句,使用了Union(All)查询:      SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --

iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局

iOS流布局UICollectionView系列三--使用FlowLayout进行更灵活布局 一.引言         前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout没有着重探讨,这篇博客介绍关于布局的相关设置和属性方法. UICollectionView的简单使用:http://my.oschina.net/u/2340880/blog/522613    UICollectionView相关协议

iOS开发UINavigation系列三——工具栏UIToolBar

iOS开发UINavigation系列三--工具栏UIToolBar         iOS中除了UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也有UIBarButtonItem按钮,在前两篇博客中,对导航栏和导航项都进行的讨论,地址如下: UINavigationBar:http://my.oschina.net/u/2340880/blog/527706 UINavigationItem:http://my.