2011-06-10 2 views
1

Y at-il un chemin plus court pour écrire la chaîne de format pour un prédicat équivalent à ceci:Manière plus courte d'écrire une chaîne de format NSPredicate pour tester plusieurs propriétés?

[NSPredicate predicateWithFormat: @"key1 CONTAINS[cd] %@ OR key2 CONTAINS[cd] %@ OR key3 CONTAINS[cd] %@", searchString, searchString, searchString]; 

J'ai écrit quelques chaînes de format prédicat comme celui-ci, et je pensais à simplifier qu'en écrivant une méthode qui prend un tableau de chemins clés et la chaîne de recherche pour construire un tel prédicat. Mais je pensais que je demanderais s'il y a une manière intégrée de faire ceci, avant de faire cela.

Répondre

6

NSCompoundPredicate est une sous-classe de NSPredicate et prend un NSArray de NSPredicate instances. Cependant, cela signifierait que vous devez toujours construire les objets NSPredicate (les subpredicates si vous voulez) vous-même. Ma suggestion est d'écrire votre propre méthode (comme vous prévoyez de le faire), mais utilisez NSCompoundPredicate comme il est conçu à cet effet.

- (NSPredicate *)predicateWithKeyPaths:(NSArray *)keyPaths andSearchTerm:(NSString *)searchTerm { 
NSMutableArray *subpredicates = [[NSMutableArray alloc] init]; 

for (NSString *keyPath in keyPaths) { 
    NSPredicate *subpredicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[cd] %@", keyPath, searchTerm]; 
    [subpredicates addObject:subpredicate]; 
} 

NSPredicate *result = [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]; 
[subpredicates release]; 

return result;} 
+0

Merci. C'est à propos de la méthode que j'aurais écrite. J'espérais juste que c'était intégré d'une manière ou d'une autre. – Sven

2

Je ne crois pas qu'il existe un moyen plus court. Une alternative consiste à utiliser la méthode orPredicateWithSubpredicates:. Ce n'est pas plus court, mais probablement pas aussi "ennuyeux" que d'avoir à concaténer des cordes.

Questions connexes