在上一篇文章中,可以发现有0岁的条目:
2022-03-04 16:27:23.552477+0800 CoreData实践1[72820:3059276] personName:personSomeone5009 age:0
系统想要将这些age = 0 的条目删掉。
其基本的操作是:
找到 age = 0 的条目
删除这些条目
用上下文保存
- (void)deleteSomeoneAge:(int64_t)age{
//创建请求对象(填入的是表名称)
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//创建过滤器
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"age=0"];
request.predicate = predicate;
//创建一个error用于接收错误,如果有错误的话。
NSError* error = nil;
//创建一个数组用于接收查询到的数据对象
NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"查询失败,错误信息:%@",error);
}else{
NSLog(@"查询结果如下");
for (Person* person in resultArray) {
NSLog(@"personName:%@ age:%zd",person.name,person.age);
//删除
[self.context deleteObject:person];
}
//遍历删除完后,保存一下上下文
//所有的操作都是在内存中的,最后我们需要提交到数据库更新一下
[self.context save:&error];
if(error){
NSLog(@"数据删除保存失败,失败信息:%@",error);
}else{
NSLog(@"数据删除保存完成");
}
}
}
运行结果:
2022-03-04 16:47:03.009790+0800 CoreData实践1[73184:3074793] 查询结果如下
2022-03-04 16:47:03.010098+0800 CoreData实践1[73184:3074793] personName:personSomeone5009 age:0
2022-03-04 16:47:03.014724+0800 CoreData实践1[73184:3074793] 数据删除保存完成
- (void)updatePersonWithName:(NSString*)name changeAge:(int64_t)age{
//创建请求对象(填入的是表名称)
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//创建过滤器
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name=%@",name];
request.predicate = predicate;
//创建一个error用于接收错误,如果有错误的话。
NSError* error = nil;
//创建一个数组用于接收查询到的数据对象
NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"查询失败,错误信息:%@",error);
}else{
NSLog(@"查询结果如下");
for (Person* person in resultArray) {
NSLog(@"personName:%@ age:%lld",person.name,person.age);
//所有的操作都是在内存中的,最后我们需要提交到数据库更新一下
person.age = 18;
[self.context save:&error];
if(error){
NSLog(@"数据修改失败,失败信息:%@",error);
}else{
NSLog(@"数据修改完成:%@-%lld",person.name,person.age);
}
}
}
}
运行结果:
2022-03-04 17:45:32.081605+0800 CoreData实践1[74137:3113654] 查询结果如下
2022-03-04 17:45:32.082136+0800 CoreData实践1[74137:3113654] personName:personSomeone8011 age:92
2022-03-04 17:45:32.087725+0800 CoreData实践1[74137:3113654] 数据修改完成:personSomeone8011-18
2022-03-04 17:45:32.088342+0800 CoreData实践1[74137:3113654] 查询结果如下
2022-03-04 17:45:32.088495+0800 CoreData实践1[74137:3113654] personName:personSomeone8011 age:18
模糊查询有很多中方式,其中:
BEGINSWITH 是开头相似
ENDWITH 是结尾相似
CONTAINSWITH 是中间相似
like * 通配符方式,*后面接匹配的字符
[self fuzzyQueryDataWithNameString:@"personSomeone80"];
- (void)fuzzyQueryDataWithNameString:(NSString*)info{
//创建请求对象(填入的是表名称)
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//创建过滤器
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",info];
request.predicate = predicate;
//创建一个error用于接收错误,如果有错误的话。
NSError* error = nil;
//创建一个数组用于接收查询到的数据对象
NSArray* resultArray = [self.context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"查询失败,错误信息:%@",error);
}else{
NSLog(@"查询结果如下");
if (resultArray.count) {
for (Person* person in resultArray) {
NSLog(@"personName:%@ age:%lld",person.name,person.age);
}
}else{
NSLog(@"无");
}
}
}
运行结果:
2022-03-04 18:01:04.186396+0800 CoreData实践1[74453:3127878] 查询结果如下
2022-03-04 18:01:04.186900+0800 CoreData实践1[74453:3127878] personName:personSomeone8011 age:18
2022-03-04 18:01:04.187305+0800 CoreData实践1[74453:3127878] personName:personSomeone8030 age:24