您的位置:首页 > 其它

【CoreData】分页查询和模糊查询

2015-11-02 20:59 190 查看
在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使用可在博客中找到。

如果内容有错或有什么问题可以与我联系,转载请注明出处,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: