Ваша проблема в том, что анализатор предикатов не имеет ни малейшего представления о том, к какому набору следует применить ANY
.
С этой моделью данных:
PUBLISHER<< --- >>PUBLICIST<<-->BOOK<<--->AUTHOR<<-->>AGENTS
... ваш путь к ключу:
pubHouse.publicist.assignedBook.authorRep.agentName
… с точки зрения объектов и набора отношений выглядит примерно так:
object.set.object.object.set
Итак, это два набора, к которым ANY
может относиться.
Вы можете попытаться создать подзапрос для обработки предиката, но если вам придется преодолеть такое количество отношений, ваша выборка будет включать в себя большую часть ваших данных и будет очень, очень медленной (при условии, что вы работаете в первом место.)
Обычно, когда вы получаете такой запутанный предикат, как этот, это указывает на то, что вы подходите к проблеме не с того конца. В этом случае было бы проще начать с простого предиката, например:
NSArray *agentNames = [NSArray arrayWithObjects:Dan, Hunter, Sloan, Jackson];
request.entity = [NSEntityDescription entityForName:@"Agent" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"agentName IN %@", agentNames];
Тогда вы пройдете по ключевому пути отношений:
authors.books.publicist.publishers
… чтобы найти всех связанных издателей.
Я думаю, что у вас будут проблемы, независимо от того, что вы делаете, потому что у вас более одного отношения «многие ко многим», например.
PUBLISHER<<--->>PUBLICIST
… экспоненциально увеличивает сложность предикатов и отношений. Обычно в таком случае вам может понадобиться дополнительная сущность для более тщательного моделирования одного из отношений. Это обычно уменьшает сложность самой модели данных, что упрощает выборки и обходы.