2010-09-09 8 views
5

Dire che ho oggetti dati di base di tipo "obj" che ha una proprietà "proprietàA" e una relazione uno-a-molti con un oggetto di tipo "sub" che ha due proprietà, "proprietàB" e "proprietàC".Come posso utilizzare NSPredicate per filtrare le relazioni dei dati di base?

Voglio recuperare tutti gli oggetti che hanno proprietàA uguale a un valore e un oggetto secondario con proprietàB e proprietàC impostate.

Se fosse solo propertyA e propertyB, farei

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

Il problema è che io non riesco a capire come aggiungere nella seconda proprietà. Voglio solo gli oggetti che hanno almeno un sottotitolo che ha le due proprietà vere. Ho provato quanto segue, ma non funziona:

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

Ho provato senza ANY, ma che non funziona neanche. Come posso fare questo?

risposta

7

Poiché si ha una relazione a molti con l'oggetto secondario, la proprietà subs di obj restituisce un set anziché un singolo oggetto. Per interrogare il set, è necessario utilizzare una SUBQUERY.

Sottointerrogazioni hanno la forma:

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

in questo caso si vorrebbe qualcosa di simile

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

Grazie, ma non riesco a trovare nulla su SUBQUERY in nessuna documentazione Apple. La mia app verrà rifiutata dal negozio Apple se la utilizzo? – Mike

+0

Non riesco a far funzionare la SUBQUERY. Il mio predicato originale era: – Mike

+0

NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "isdeleted == NO AND ANY appuserMessages.recAppUserID ==% @", appuserid]; – Mike

4

La soluzione sembra essere:

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

dove i valori alla fine sono i valori a cui si desidera che le varie proprietà siano uguali.

Problemi correlati