使用 NSPredicate 获取核心数据对象数组?

Posted

技术标签:

【中文标题】使用 NSPredicate 获取核心数据对象数组?【英文标题】:Using NSPredicate to get an array of Core Data objects? 【发布时间】:2010-11-23 03:53:51 【问题描述】:

假设我有一个名为 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

【问题讨论】:

【参考方案1】:

我不是predicateWithFormat: 语法方面的专家,但你有基本的要点。您可以在 Apple 的Predicate Programming Guide 中找到有关格式的详细信息。如果您想知道一旦拥有谓词后如何处理它,这里有一个 sn-p,它向您展示了步骤:

// 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: 将排序描述符数组传递给提取请求。

【讨论】:

【参考方案2】:

如果变量中有这些值,则可以遵循给定的语句。

[fetchResults filterUsingPredicate:[NSPredicate predicateWithFormat:@"age == %i OR hieght== %i AND weight==%i",age,height,weight]];

而且你的方法在特定值的情况下是正确的,但是你的语句有语法错误,所以保持正确的语法

【讨论】:

以上是关于使用 NSPredicate 获取核心数据对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 获取具有 NSDate 日期范围内的日期属性的核心数据对象

带有核心数据对象的 NSPredicate

核心数据:NSPredicate 对象由实体对象组成

核心数据:如何使用 NSPredicate 查找空字段

NSPredicate - 核心数据 - 比较两个属性

使用 NSPredicate 过滤核心属性和实体