2010-09-09 6 views
5

Digamos que tengo objetos de datos centrales del tipo "obj" que tiene una propiedad "propertyA" y una relación de uno a muchos con un objeto del tipo "sub" que tiene dos propiedades, "propertyB" y "propertyC".¿Cómo puedo usar NSPredicate para filtrar las relaciones de datos centrales?

Quiero buscar todos los objs que tienen propertyA igual a un valor y un sub obj con propertyB y propertyC establecidos.

Si fuera sólo propertyâ y propertyB, lo haría

[NSPredicate predicateWithFormat:@"ANY sub.propertyB = %@ AND propertyA == %@", ...]; 

El problema es que no puedo encontrar la manera de añadir en la segunda propiedad. Solo quiero los objs que tengan al menos un sub que tenga las dos propiedades verdaderas. He intentado lo siguiente, pero no funciona:

[NSPredicate predicateWithFormat:@"ANY (sub.propertyB = %@ AND sub.propertyC) AND propertyA == %@", ...]; 

Lo he intentado, pero sin la CUALQUIER eso no funciona bien. ¿Cómo puedo hacer esto?

Respuesta

7

Dado que tiene una relación muchos con el objeto secundario, la propiedad subs de obj devuelve un conjunto en lugar de un único objeto. Para consultar el conjunto, debe usar SUBQUERY.

subconsultas tienen la forma:

SUBQUERY(collection, $individualCollectionItem, expression-with-collection-item) 

en este caso, usted quiere algo así como

SUBQUERY(subs,$s,$s.propertyB==%@) AND SUBQUERY(subs,$s,$s.propertyC!=NULL) 
+0

Gracias, pero no encuentro nada sobre SUBQUERY en ninguna de las documentaciones de Apple. ¿Mi aplicación va a ser rechazada desde la tienda Apple si la uso? – Mike

+0

No puedo hacer que SUBQUERY funcione en absoluto. Mi predicado original fue: – Mike

+0

NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "isdeleted == NO Y CUALQUIER appuserMessages.recAppUserID ==% @", usuariousuario]; – Mike

4

La solución parece ser:

[NSPredicate predicateWithFormat:@"propertyA == %@ AND (SUBQUERY(sub, $s, $s.propertyB == %@ AND $s.propertyC == %@)[email protected] != 0)", propertyAvalue, propertyBvalue, propertyCvalue]; 

donde los valores al final son los valores que quiere que sean iguales las distintas propiedades.

Cuestiones relacionadas