NSPredicate基于一对多值的过滤器

时间:2012-04-25 10:12:36

标签: ios core-data filtering nspredicate

我有2个具有一对多关系的实体。 Category代表我的标题标题,SubSubCategory代表我的行。

Category
{
    name:string
    subs<-->>SubCategory
}

SubCategory
{
    name:string
    numbervalue:NSNumber
}

目前,我可以使用NSPredicate根据名称过滤我的部分。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name==%@",@"anamevalue"];

现在,我想进一步过滤此谓词,只返回Subcategorysubvalue == 1的类别。

如何根据其中一对多子女的值过滤Category实体?

我尝试过类似的东西,但这并不好。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name==%@ AND subs.numbervalue==%@",@"anamevalue",1];

2 个答案:

答案 0 :(得分:4)

我会做如下的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@ AND ANY subs.numbervalue == %@)", @"anamevalue", [NSNumber numberWithInt:1]];

ANY是一个谓词修饰符,只有当subs集合中至少有一个对象返回true时才返回true。

同样的结果可以通过SUBQUERY

来完成

希望它有所帮助。

答案 1 :(得分:0)

谓词中的语法错误。您将整数值作为字符串传递。

你的谓词应该是

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name==%@ AND subs.numbervalue==%i",@"anamevalue",1]

除此之外,它看起来是正确的。