saca que proceso prima materiales materia los hecho fabricacion fabrica esta donde construido con apple iphone core-data nspredicate

iphone - que - ¿Cuál es la mejor manera de construir NSPredicate con muchas relaciones profundas?



proceso de fabricacion del iphone 7 (2)

Tengo tres entidades: EntityA, EntityB y EntityC conectadas con muchas relaciones.

Ver esquema para más detalles:

texto alternativo http://img706.imageshack.us/img706/9974/screenshot20091220at124.png

Para obtener todas las instancias de EntityA que dependen de EntityB.name, uso el predicado de esta manera:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY EntityB.name like ''SomeName''"];

¿Cuál debería ser el predicado para obtener todas las instancias de EntityA que dependen de EntityC.name? @"ANY EntityB.entitiesC.name like ''SomeName''" consulta como @"ANY EntityB.entitiesC.name like ''SomeName''" pero obtienes la excepción "multiple to-many keys not allowed here" .

Atentamente,

Víctor


Mi solución final es usar SUBQUERY.

NSPredicate *p = [NSpredicate predicateWithFormat:@"(name like %@) AND (0 != SUBQUERY(entitiesB, $x, (0 != SUBQUERY($x.entitiesC, $y, $y.name like %@).@count)).@count)", nameA, nameC];

Lamentablemente, no pude expandir esta consulta sobre los objetos nsExpression.


Mientras estaba detenido en la siguiente decisión:

Primero, obtengo todos los EntityC que satisfacen la condición EntityC.name igual a ''SomeName''

NSPredicate *p = [NSPredicate predicateWithFormat:@"name like %@", @"SomeName];

...

NSArray *res = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

Luego obtengo una matriz de EntityB de la consulta anterior

NSArray *parentBs = [res valueForKeyPath:@"@distinctUnionOfObjects.parent"];

Que obtener una matriz de EntityB que satisfaga la condición EntityB.EntitiesC.name igual a ''SomeName'':

NSExpression *leftExpression = [NSExpression expressionForEvaluatedObject]; NSExpression *rightExpression = [NSExpression expressionForConstantValue:parentBs]; NSPredicate *p = [NSComparisonPredicate predicateWithLeftExpression:leftExpression rightExpression: rightExpression modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType options:0];

Repito lo mismo para EntityA.

La efectividad de esta solución es dudosa y aún espero una mejor solución para este problema.