【问题标题】:NSPredicate filter based on one to many values基于一对多值的 NSPredicate 过滤器
【发布时间】:2012-04-25 10:12:36
【问题描述】:

我有 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];

【问题讨论】:

    标签: ios core-data filtering nspredicate


    【解决方案1】:

    我会做一个如下的谓词:

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

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

    同样的结果可以通过SUBQUERY来完成。

    希望对你有帮助。

    【讨论】:

    • 非常感谢。你能分享一个谓词修饰符列表的链接吗?我从未在 nspredicate 编程指南中遇到过这种情况
    • 寻找谓词编程指南。在这里Aggregate Operations section 可以找到一些有用的信息。希望对您有所帮助。
    【解决方案2】:

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

    你的谓词应该是

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 2012-06-14
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-01-12
      • 1970-01-01
      相关资源
      最近更新 更多