使用NSPredicate如何过滤核心数据的值

我有一个实体和三个属性,称为名称,版本,公司。 我想过滤公司属性的价值,如“快餐”。

NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Device" inManagedObjectContext:managedObjectContext]; [request setEntity:entity]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"('company' contains[c] 'Fast Foood')"]; [request setPredicate:predicate]; NSLog(@"Pre %@",predicate); NSError *error = nil; NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; if (mutableFetchResults == nil) { // Handle the error. } // Set self's events array to the mutable array, then clean up. [self setDataarr:mutableFetchResults]; 

但我不能这样做帮助我。

您不需要用引号括起属性名称:

 [NSPredicate predicateWithFormat:@"company CONTAINS[c] 'Fast Foood'"]; 

或更好

 [NSPredicate predicateWithFormat:@"company CONTAINS[c] %@", @"Fast Foood"]; 

顺便说一句:你的谓词search“快速食物”,而不是“快餐”。


(针对您的意见)您应该使用一对多的关系来定义实体类别菜肴

在这里输入图像说明

现在,您可以使用以下获取请求查找给定类别的所有菜肴:

 NSString *catName = @"Desert"; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Dish"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category.name = %@", catName]; [request setPredicate:predicate];