【CoreData】分页查询和模糊查询
2015-11-02 20:59
267 查看
在CoreData实际使用中,分页查询和模糊查询是必不可少的,接下来演示一下:
首先
// 1.创建模型文件 (相当于一个数据库里的表)
// New File ———— CoreData ———— Data Model ———— Next
// 2.添加实体 (相当于一张表)
// 找到我们创建的模型文件(xxx.xcdatamodeld,我创建的叫School.xcdatamodeld)————Add
Entity ———— 添加表内属性(这边我添加2个属性(name,age))
// 3.创建实体类
// New File ———— CorData ———— NSManagedobject subclass ————Next(记得选择需要关联的表)这样就会自动生成相应的模型
// 4.生成上下文 关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,CoreData会自己创建)
// 上下文,记得引用CoreData框架
NSManagedObjectContext *context= [[NSManagedObjectContext alloc]init];
// 上下文关联数据库
// model模型文件, 参数:mergedModelFromBundles:因为模型文件是资源文件,所以会放到BUNDLES里面,所以只需要写nil就可以了。
NSManagedObjectModel *model= [NSManagedObjectModel mergedModelFromBundles:nil];
// 持久化存储调度器(持久化:把数据保存在一个文件,而不是放在内存中)
NSPersistentStoreCoordinator *store=[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 告诉CoreData数据库的名字和路径
NSString *doc=
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath=[doc stringByAppendingPathComponent:@"School.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nilerror:nil];
context.persistentStoreCoordinator =store;
然后我们来测试一下是否可以写入数据
#pragma mark - 添加
- (void)addStudent
{
//为了更好地演示查询和分页,我们通过FOR循环来创建多个个学生对象
for(inti =
0;i<<span style="font-variant-ligatures: no-common-ligatures;color: #272ad8">20; i++)
{
Student*stu=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];
if(i/2==
0){
stu.name= [NSStringstringWithFormat:@"李四%d",i];
}
else
{
stu.name= [NSStringstringWithFormat:@"张三%d",i];
}
stu.age=
@(1.9+ i);
}
//
直接保存数据库
[_contextsave:nil];
}
写入数据成功,接下来就是分页查询的使用方法
#pragma mark - 分页查询
- (void)pagination
{
// 1.FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
// 2.分页查询
//
分页的起始索引
request.fetchOffset=
0;
//
每一页条数
request.fetchLimit=
7;
//因为我们总共添加了20条数据,所以从0- 7会获取7条信息
// 7 - 7也是7条信息
//
当从 14- 7
获取的时候就只剩6条信息了
// 3.设置排序
// 身高的升序排序
NSSortDescriptor
*ageSort= [NSSortDescriptor sortDescriptorWithKey:@"age"ascending:YES]; //降序为NO
request.sortDescriptors=
@[ageSort];
// 4.执行请求
NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@身高:%@",stu.name,stu.age);
}
}
#pragma mark - 模糊查询
- (void)dimquery
{
// 1.FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
// 2.设置过滤条件
//
查找“张”开头也可以用like
NSPredicate*pre= [NSPredicatepredicateWithFormat:@"nameBEGINSWITH
%@",@"张"];
// like的功能和上面的BEGINSWITH一样
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name like %@", @"张"];
//
查找 “1”结尾
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name ENDSWITH %@", @"1"];
//
查找包含“张三2”的
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name CONTAINS %@",@"张三2"];
request.predicate= pre;
// 3.设置排序
//
身高的升序排序
NSSortDescriptor
*ageSort= [NSSortDescriptor sortDescriptorWithKey:@"age"ascending:YES]; //降序为NO
request.sortDescriptors=
@[ageSort];
// 4.执行请求
NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@身高:%@",stu.name,stu.age);
}
}
DEMO下载地址:链接: http://pan.baidu.com/s/13Feay 密码: qyjq
OK,以上就是最常用的几种查询方式,在实际应用中可以穿插使用来达到想要的效果,更多地CoreData使用可在博客中找到。
如果内容有错或有什么问题可以与我联系,转载请注明出处,谢谢!
首先
// 1.创建模型文件 (相当于一个数据库里的表)
// New File ———— CoreData ———— Data Model ———— Next
// 2.添加实体 (相当于一张表)
// 找到我们创建的模型文件(xxx.xcdatamodeld,我创建的叫School.xcdatamodeld)————Add
Entity ———— 添加表内属性(这边我添加2个属性(name,age))
// 3.创建实体类
// New File ———— CorData ———— NSManagedobject subclass ————Next(记得选择需要关联的表)这样就会自动生成相应的模型
// 4.生成上下文 关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,CoreData会自己创建)
// 上下文,记得引用CoreData框架
NSManagedObjectContext *context= [[NSManagedObjectContext alloc]init];
// 上下文关联数据库
// model模型文件, 参数:mergedModelFromBundles:因为模型文件是资源文件,所以会放到BUNDLES里面,所以只需要写nil就可以了。
NSManagedObjectModel *model= [NSManagedObjectModel mergedModelFromBundles:nil];
// 持久化存储调度器(持久化:把数据保存在一个文件,而不是放在内存中)
NSPersistentStoreCoordinator *store=[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 告诉CoreData数据库的名字和路径
NSString *doc=
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath=[doc stringByAppendingPathComponent:@"School.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nilerror:nil];
context.persistentStoreCoordinator =store;
然后我们来测试一下是否可以写入数据
#pragma mark - 添加
- (void)addStudent
{
//为了更好地演示查询和分页,我们通过FOR循环来创建多个个学生对象
for(inti =
0;i<<span style="font-variant-ligatures: no-common-ligatures;color: #272ad8">20; i++)
{
Student*stu=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];
if(i/2==
0){
stu.name= [NSStringstringWithFormat:@"李四%d",i];
}
else
{
stu.name= [NSStringstringWithFormat:@"张三%d",i];
}
stu.age=
@(1.9+ i);
}
//
直接保存数据库
[_contextsave:nil];
}
写入数据成功,接下来就是分页查询的使用方法
#pragma mark - 分页查询
- (void)pagination
{
// 1.FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
// 2.分页查询
//
分页的起始索引
request.fetchOffset=
0;
//
每一页条数
request.fetchLimit=
7;
//因为我们总共添加了20条数据,所以从0- 7会获取7条信息
// 7 - 7也是7条信息
//
当从 14- 7
获取的时候就只剩6条信息了
// 3.设置排序
// 身高的升序排序
NSSortDescriptor
*ageSort= [NSSortDescriptor sortDescriptorWithKey:@"age"ascending:YES]; //降序为NO
request.sortDescriptors=
@[ageSort];
// 4.执行请求
NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@身高:%@",stu.name,stu.age);
}
}
#pragma mark - 模糊查询
- (void)dimquery
{
// 1.FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
// 2.设置过滤条件
//
查找“张”开头也可以用like
NSPredicate*pre= [NSPredicatepredicateWithFormat:@"nameBEGINSWITH
%@",@"张"];
// like的功能和上面的BEGINSWITH一样
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name like %@", @"张"];
//
查找 “1”结尾
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name ENDSWITH %@", @"1"];
//
查找包含“张三2”的
// NSPredicate *pre =[NSPredicate predicateWithFormat:@"name CONTAINS %@",@"张三2"];
request.predicate= pre;
// 3.设置排序
//
身高的升序排序
NSSortDescriptor
*ageSort= [NSSortDescriptor sortDescriptorWithKey:@"age"ascending:YES]; //降序为NO
request.sortDescriptors=
@[ageSort];
// 4.执行请求
NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@身高:%@",stu.name,stu.age);
}
}
DEMO下载地址:链接: http://pan.baidu.com/s/13Feay 密码: qyjq
OK,以上就是最常用的几种查询方式,在实际应用中可以穿插使用来达到想要的效果,更多地CoreData使用可在博客中找到。
如果内容有错或有什么问题可以与我联系,转载请注明出处,谢谢!
相关文章推荐
- 【CoreData】多个数据库使用
- 【网络编程】TCP/IP、UDP、网络概…
- 【网络编程】Socket概念及简单聊天…
- 【数据库】MySQL的安装与简单使用
- 【即时通讯】即时通讯及XMPP概述及…
- 【即时通讯】XMPP调试与简单使用
- 01_iOS开发需要准备什么?
- IOS开发——01_第一个OC程序
- 拓展:使用终端创建、编译、链接OC…
- Mac 常用快捷键
- 缓冲读取缓冲输入
- python标准库介绍
- 扫描周围可用蓝牙设备、以及设置蓝牙设备的可见性
- 了解blocks基本语法
- 天声人語 20151102 封筒の「憲法」に黒塗り
- 同一个form里,不管哪个 submit 都是直接提交form表单里的内容
- java随机生成十个数
- EditPlus取消备份文件
- Lua1.0 数据结构
- Instance Methods are Curried Functions in Swift