2010-06-03 12 views
34

J'ai un NSArray de CalEvents retourné avec la méthode [CalCalendarStore eventPredicateWithStartDate]. A partir des événements retournés, j'essaie de ne garder que ceux dans lesquels le titre de l'événement == @"on call" (insensible à la casse).Utilisation de NSPredicate pour déterminer si une chaîne est égale à une autre chaîne

Je suis en mesure de garder dans le tableau ces événements dont le titre comprend @"on call" avec le code suivant (où « événements » est un « NSArray » peuplé de CalEvents):

NSPredicate *onCallPredicate = [NSPredicate predicateWithFormat:@"(SELF.title CONTAINS[c] 'on call')"]; 
[events filteredArrayUsingPredicate:onCallPredicate]; 

J'ai essayé en utilisant une chaîne de format de prédicat comme:

@"SELF.title == 'on call'" mais cela ne semble pas fonctionner.

Existe-t-il un moyen plus simple de le faire?

Répondre

99

Essayez [NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

(Le [c] fait la comparaison de l'égalité insensible à la casse.)

+11

+1, bien que vous puissiez lancer le modificateur '[c]' après le '==' pour le rendre insensible à la casse. –

+1

L'a édité pour être insensible à la casse. –

+0

Juste curieux, MATCH [n] fonctionnera pour == lorsqu'il est utilisé sans joker (*?)? – Samuel

10

Essayez prédicats au format @"self.title like[c] 'on call'". L'exemple de code suivant génère deux chaînes:

NSArray* ar = [NSArray arrayWithObjects:@"on call", @"I'm on call", @"lala", @"On call", nil]; 
NSArray* filt = [ar filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self like[c] 'on call'"]]; 
NSLog([filt description]); 

//Output 
"on call", 
"On call" 
+3

Y a-t-il une différence entre utiliser '==' et 'like' pour les comparaisons de chaînes? – Garry

+0

On dirait que dans votre cas le travail est le même. Mais si vous voulez utiliser des caractères génériques dans la comparaison de chaînes, '==' ne fonctionnera pas et vous devrez utiliser LIKE à la place. – Vladimir