基于一对多值的 NSPredicate 过滤器
Posted
技术标签:
【中文标题】基于一对多值的 NSPredicate 过滤器【英文标题】:NSPredicate filter based on one to many values 【发布时间】: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"];
现在我想进一步过滤此谓词以仅返回具有Subcategory
和subvalue == 1
的类别。
如何根据 Category
实体的一对多子项中的值过滤它?
我尝试过类似的方法,但效果不佳。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name==%@ AND subs.numbervalue==%@",@"anamevalue",1];
【问题讨论】:
【参考方案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]
除此之外它看起来是正确的。
【讨论】:
以上是关于基于一对多值的 NSPredicate 过滤器的主要内容,如果未能解决你的问题,请参考以下文章