2010-08-04 6 views
2

Je suis en train d'utiliser un NSPredicate pour rechercher la chaîne correspond à l'encontre d'un tableau d'objets CoreData généré comme tant de NSSet:correspondance de chaîne NSPredicate contre

// Grab an array of all Company projects 
NSArray *array = [[company projects] allObjects]; 

J'utilise le prédicat suivant pour correspondre aux noms de projet, entreprise les noms ou les noms des clients avec une chaîne insensible à la casse (note: cela devrait permettre des correspondances partielles, de sorte que « App » correspondra à Apple Inc. », etc.):

(name LIKE[cd] %@) OR (ANY companies.name LIKE[cd] %@) OR (ANY companies.clients.name LIKE[cd] %@) 

les relations CoreData mentionnées dans le prédicat ressembler à:

SELF -> (NSString *) name 
SELF -> (NSSet *) companies -> (NSString *) name 
SELF -> (NSSet *) companies -> (NSSet *) -> clients -> (NSString *) name 

Chaque fois que je tente de filtrer le prédicat ci-dessus, je trouve ce qui suit dans la console:

HIToolbox: ignoring exception 'Can't do regex matching on object {(
    "Apple Inc.", 
"Test Co.", 
Microsoft 
)}.' 

Si je suis il semble que les choses correctement comprendre, en essayant de faire correspondre keypath " companies.clients.name "renvoie un NSSet (ou un autre objet) où un NSString (nom) était attendu.

Qu'est-ce que je fais mal?

Répondre

3

companies.clients.name retournera collection de NSSet s, où chaque élément de l'assemblage est le contenu des noms de clients d'une entreprise (à savoir un NSSet). Vous voulez probablement utiliser [email protected] dans votre chaîne de prédicat.

Voir le guide sur l'utilisation de Set and Array Operators dans le codage de valeur-clé.

+0

@distinctUnionOfSets a fait l'affaire. Merci beaucoup. – ndg

Questions connexes