使用 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 获取核心数据对象数组?的主要内容,如果未能解决你的问题,请参考以下文章