核心数据:获取以一对多关系获取实体的请求

时间:2012-10-09 22:26:29

标签: objective-c core-data

假设我有3个实体GrandparentParentChild

Grandparent - Parent是一对多的关系

Parent - Child是多对一的关系

Child具有age属性

我的目标是让Child的所有Parent个实体Parent.grandparent都在某个Grandparent。另外,我想按age对获取的结果进行排序。我知道我可以通过多个步骤执行此操作,但我的问题是:如何在单个提取请求中完成此操作?

编辑:也许这个图表会比上面的描述更清晰一些。 enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我很幸运,找到了这个答案 NSPredicate acting strange in NSFetchedResultsController

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

[NSPredicate predicateWithFormat:@"SUBQUERY(parent, $x, $x.grandparent == %@).@count != 0", grandParent];