Хорошее эмпирическое правило заключается в том, что если у вас уже есть управляемые объекты в руках, вы не выбираете, а вместо этого просматриваете отношения между имеющимися управляемыми объектами и нужными вам управляемыми объектами.
Итак, ваш график отношений, вероятно, на самом деле выглядит так:
SnapShot <-->> Pane <--> ManagedImage
или, может быть:
SnapShot <<-->> Pane <<--> ManagedImage
Поскольку у вас есть набор ManagedImage
объектов, все, что вам нужно сделать, - это пройти по траектории pane.snapShot
или panes.snapShots
, чтобы найти SnapShot
объекты, связанные с каждым ManagedImage
объектом. Затем вы просто извлекаете уникальные SnapShot
объекты.
В первом случае дело тривиально из-за отношения один-к-одному
ManagedImage-->Pane-->SnapShot
Во втором случае вам необходимо сначала получить все уникальные объекты SnapShot:
NSSet *shots=[aMangedImageObj valueForKeyPath:@"distinctUnionOfSets.panes.snapShots"];
... для каждого ManagedImage
экземпляров, а затем объединить все наборы с помощью setByAddingObjectsFromSet:
или аналогичным методом для получения единого набора уникальных объектов.
Выборки должны использоваться, чтобы найти первые объекты в графе, которые вам нужны, но как только у вас есть объекты, вы не выбираете, а просматриваете отношения. В противном случае, нет особого смысла иметь отношения в первую очередь.