iOS学习之CoreData模糊查找,分页查找,多模型文件处理

本文介绍了在iOS开发中使用CoreData进行模糊查找和分页查询的方法。通过NSPredicate创建过滤条件,实现了BEGINSWITH、ENDSWITH、CONTAINS等模糊查找功能,并展示了如何设置NSFetchRequest实现数据分页。此外,还讨论了在工程中处理多个xcdatamodeld模型文件的策略,即每个模型文件对应一个独立的数据库和上下文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坚持 成长 每日一篇

模糊查找

CoreData在抓取数据库对象时候,我们可以创建NSPredicate对象来给NSFetchRequest设置过滤条件,以达到我们想要的结果。下面介绍几种模糊查找的使用情况

1.使用BEGINSWITH查找以固定开头的数据

 NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"wang"];
 request.predicate = pre;

2.使用ENDSWITH查找固定结尾的数据

NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"1"];
request.predicate = pre;

3.使用CONTAINS查找包含固定内容的数据

NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"wu"];
request.predicate = pre;

4.使用通配符*查找,这里相当于查找以wu12结尾的数据

NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"*wu12"];
request.predicate = pre;

分页查询

当我们通过NSFetchRequest查找很多条数据结果时候,我们可以通过设置NSFetchRequest的属性来实现分页显示数据

 // 分页的起始索引
    request.fetchOffset = 0;
 // 分页的条数
    request.fetchLimit = 6;

注意:上面的数字0表示我们已经完成过滤,排序后的数据的第1条开始抓取数据,数字6表示抓取6条数据

多模型文件处理

在一个工程里,我们会用到多个xcdatamodeld格式的模型文件,对于这种情况我们一般的处理是对每一个模型文件创建一个数据库,一个数据库对于一个上下文。
如下方法可以根据不同模型文件名创建不同的数据库并返回一个与该数据库关联的上下文。

-(NSManagedObjectContext *)setupContextWithModelName:(NSString *)modelName{
    // modelName为模型文件名
    // 使用下面的方法,如果 bundles为nil 会把bundles里面的所有模型文件的表放在一个数据库
    //NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
    NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);
    //模型文件加载到bundle以后是以momd格式的文件存在
    NSURL *companyURL = [[NSBundle mainBundle] URLForResource:modelName withExtension:@"momd"];
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:companyURL];

    // 持久化存储调度器
    // 持久化,把数据保存到一个文件,而不是内存
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    // 告诉Coredata数据库的名字和路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    //根据不同的模型名,创建不同的数据库
    NSString *sqliteName = [NSString stringWithFormat:@"%@.sqlite",modelName];
    NSString *sqlitePath = [doc stringByAppendingPathComponent:sqliteName];
    NSLog(@"%@",sqlitePath);
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];
    // 上下文
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];

    // 上下文关连数据库
    context.persistentStoreCoordinator = store;

    return context;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值