0

我有一个这样的 CoreData 模型数据结构,用于根据用户所属的组来限制信息:

类别 <->> 信息 <->> 组。

我有一个用户组对象的 NSSet。我希望能够根据 Group 对象的 NSSet 过滤类别,这样如果一个类别不包含任何在我的 NSSet 中有任何组的信息,它们将不会被我的谓词返回。

有关我可以做的信息

[NSPredicate predicateWithFormat:@"ANY groups in (%@)",groups];

对于类别,我尝试了以下操作,但只有一次崩溃:

[NSPredicate predicateWithFormat:@"ANY information.groups in (%@)",groups];

但我需要在类别级别编写一个谓词。我在假设我的数据集中的信息足够大以至于我无法将它们全部提取并处理它们以找到我的类别的假设下进行编程。我想创建一个谓词,它只根据用户的组获取与用户相关的类别。

谢谢你的帮助!

4

1 回答 1

3

以下关于Category的谓词应该起作用(假设这是从CategoryInformationinformation的一对多关系):

[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"];

这种替代解决方案的缺点可能是它还在内存中创建了中间组集。

于 2013-02-08T06:14:51.110 回答