坚持 成长 每日一篇
模糊查找
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;
}