1

假设我有 3 个实体GrandparentParentChild

Grandparent - Parent是一对多的关系

Parent - Child是多对一的关系

Child有一个age属性

我的目标是让所有Child实体在Parent哪里Parent.grandparent是确定的Grandparent。另外,我想对获取的结果进行排序age。我知道我可以通过多个步骤来做到这一点,但我的问题是:如何在单个 fetch 请求中完成此操作?

编辑:也许这张图会比上面的描述更清楚一些。 在此处输入图像描述

4

2 回答 2

0

我很幸运,发现这个答案 NSPredicate 在 NSFetchedResultsController 中表现得很奇怪

这个问题的措辞不同,这就是为什么我花了一段时间才找到它。基本上,我正在寻找的谓词是以下格式:

[NSPredicate predicateWithFormat:@"SUBQUERY(parent, $x, $x.grandparent == %@).@count != 0", grandParent];
于 2012-10-15T21:19:42.847 回答
0

我假设变量和关系名称,将它们更改为您在代码和模型中命名的任何名称。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Child" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"parent.grandparent == %@", grandParentObject];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]];

这应该有效。我习惯了代码完成,我没有在 Xcode 中输入这个,所以方法名称可能有点偏离,但你明白了。

于 2012-10-10T00:35:54.950 回答