2010-05-13 4 views
3

L'utilisation d'un NSPredicate pour un tableau est plutôt simple en utilisant filteredArrayUsingPredicate :.Comment utiliser NSPredicate pour les valeurs de chemin de clé

Comment cela est-il fait pour les valeurs de chemin de clé? C'est-à-dire, j'ai un tableau d'objets (dans ce cas, les objets sont du même type). Les objets ont chacun une variable d'instance appelée nom. Selon la documentation, il est dit effectuer les opérations suivantes:

NSPredicate *predicate = [NSPredicate predicateWithFormat: 
    @"ANY employees.firstName like 'Matthew'"]; 

Est-ce -also- utilisé dans filteredArrayUsingPredicate? Que faire si j'ai un tableau d'objets People? cela veut-il dire que j'utiliserais:

NSArray *allPeopleObjects; // pre-populated 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY people.name like 'Foo'"]; 
NSArray *matching = [allPeopleObjects filteredArrayUsingPredicate:predicate]; 

La documentation fait un peu défaut dans ce département.

Est-il également possible d'utiliser le prédicat par rapport à un objet Personne seule? Quelque chose comme Person.name contient [cd] 'Foo'? Comment cela serait-il fait?

Répondre

0

Oui, vos deux exemples fonctionneront parfaitement. NSPredicate peut suivre des chemins de valeur de clé. Si vous avez un seul objet Person, pourquoi ne pas simplement utiliser valueForKeyPath: et faire la comparaison dans le code au lieu d'utiliser un NSPredicate? Il semble que ce soit exagéré dans ce cas.

+0

Alex, je ne suis pas exactement sûr de ce que passer valueForKeyPath par rapport à un seul objet Person. Je veux dire, je peux utiliser NSRange, mais je me demandais si je pouvais faire quelque chose comme [person valueForKeyPath: @ "name like foo"] code de type. – randombits

+0

'[[person valueForKeyPath: @" name "] rangeOfString: @" Matthew "]. Position! = NSNotFound' – Alex

Questions connexes