我有一个像这样的CoreData模型数据结构,用于根据用户所属的组限制信息:
类别< - >>信息< - >>基团。
我有一组UserGroups对象的NSSet。我希望能够根据NSSet of Group对象过滤类别,这样如果一个类别不包含我的NSSet中包含任何组的任何信息片段,我的谓词就不会返回它们。
我可以做的信息
[NSPredicate predicateWithFormat:@"ANY groups in (%@)",groups];
对于类别我只尝试过以下情况:
[NSPredicate predicateWithFormat:@"ANY information.groups in (%@)",groups];
但我需要在类别级别编写谓词。我编程的假设是我的数据集中的信息足够大,我无法将它们全部拉出来并处理它们以查找我的类别。我想创建谓词,该谓词将仅根据他/她的组获取与用户相关的类别。
感谢您的帮助!
答案 0 :(得分:3)
以下关于类别的谓词应该有效(假设information
是从类别到信息的多对多关系:
[NSPredicate predicateWithFormat:@"SUBQUERY(information, $i, ANY $i.groups in %@).@count > 0",groups];
或者,您可以使用反向关系:
// your set of Group objects:
NSSet *groups = ...;
// all Information objects that are related to any group object:
NSSet *information = [groups valueForKey:@"information"] ;
// all Category objects that are related to any information object:
NSSet *categories = [information valueForKey:@"category"];
可以合并到
NSSet *categories = [groups valueForKeyPath:@"information.category"];
这种替代解决方案的缺点可能是它还在内存中创建了一组中间组。