2010-02-26 7 views
3

J'essaye d'écrire une requête pour la barre de recherche de trouver-comme-vous-type. Ce que je veux faire, c'est interroger "Kind", et retourner tous les Kinds pour lesquels il y a un LocalName avec ('name' LIKE% @ AND localeIdentifier ==% @).Noyau de données NSPredicate avec ET

Si je ne recherche les noms (donc en ignorant le LocaleIdentifier), je pouvais faire quelque chose comme ceci:

ANY localized.name LIKE %@ 

Ce que je veux est quelque chose comme

ANY localized.(name LIKE %@ AND localeIdentifier == %@) 

En résumé En cherchant "Kind", n'importe quel élément dans la relation to-many "localisée" doit correspondre à la fois à name et à localeIdentifier.

Des idées pour la syntaxe correcte de cela?

Répondre

9

Ce que vous voulez est un subquery. Dans la syntaxe du format prédicat:

SUBQUERY(self.localized, $x, $x.name LIKE %@ AND $x.localeIdentifier == %@)[email protected] > 0 

où l'expression SUBQUERY retourne une collection d'instances dans la collection self.localized qui correspondent au prédicat dans le troisième argument. Kind instances pour lesquelles cette expression SUBQUERY est non vide (ie @count > 0) répondent à vos critères.

L'expression SUBQUERY a été introduite dans OS X 10.5.

+0

Oooh, merci. C'est exactement ce que je voulais. –

+0

Bon conseil! Exactement ce dont j'avais besoin! – Sney

Questions connexes