2010-06-13 5 views
2

J'essaie d'apprendre à utiliser des prédicats et donc essaie de remplacer le code de travail suivant avec filteredArrayUsingPredicate ...aide pour créer un prédicat pour une utilisation avec filteredArrayUsingPredicate

[filteredLocations removeAllObjects]; 
for (NSString *location in locations) { 
    NSRange range = [location rangeOfString:query options:NSCaseInsensitiveSearch]; 
if (range.length > 0) { 
     [filteredLocations addObject:location]; 
    } 
    } 

Au lieu de cela, je suis en train .... Je n'obtiens pas les mêmes résultats avec le prédicat que je le fais avec for loop rangeOfString. Avec la plage de chaînes par exemple searchText renvoie un tableau de 8 éléments alors qu'avec la même valeur renvoie seulement 2 avec le prédicat. Un autre exemple, hono trouvera honolulu dans le tableau des emplacements alors qu'il ne trouvera rien en utilisant le prédicat. Si je comprends bien, SELF représente l'objet objet en cours d'évaluation, c'est-à-dire:

le tableau des emplacements, donc je pense que c'est la syntaxe correcte.

Toute aide serait appréciée

Merci, John

Répondre

3

Je pensais que dans votre boucle, vous spécifiez une option NSCaseInsensitiveSearch mais dans le prédicat que vous ne l'avez pas.

Vous pouvez essayer avec celui-ci

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF contains[cd] %@)", searchText]; 

Plus de détails peuvent être regardé ici NSPredicate Tutorial

+0

merci qui a fait l'affaire! – user278859

Questions connexes