使用NSPredicate获取Core Data对象数组?

时间:2010-11-23 03:53:51

标签: iphone objective-c core-data ios nspredicate

假设我有一个名为Person的核心数据实体。我如何获得属性符合特定值的NSArray?例如某个特定年龄,身高或体重的人......或者身高,体重和年龄都是特定值的人......

我可以像这样使用NSPredicate:

NSPredicate *pred = 
[NSPredicate predicateWithFormat:
@"(age == 25) OR (height_in_cms == 185) OR (age == 30 AND height_in_cms == 170 AND weight_in_kgs == 80)"; 
// All properties are NSNumber

2 个答案:

答案 0 :(得分:1)

如果在变量中包含这些值,则可以按照给定的语句进行操作。

[fetchResults filterUsingPredicate:[NSPredicate predicateWithFormat:@“age ==%i OR hieght ==%i AND weight ==%i”,年龄,身高,体重]];

而且,对于特定值,您的方法也是正确的,但您的语句有语法错误,因此保持正确的语法

答案 1 :(得分:1)

我不是predicateWithFormat:语法的专家,但你有基本的要点。您可以在Apple的Predicate Programming Guide中找到有关格式的详细信息。如果您在获得谓词时询问如何处理谓词,请参阅以下步骤:

// Create a fetch request.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

// Set the entity for the fetch request.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[entity release];

// Set the predicate for the fetch request.
[fetchRequest setPredicate:predicate];

// Perform the fetch.
NSError *error;
NSArray *array = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

如果要对结果进行排序,可以在执行提取之前使用setSortDescriptors:将排序描述符数组传递给提取请求。