web-dev-qa-db-fra.com

Utilisation de NSPredicate pour déterminer si une chaîne est égale à une autre chaîne

J'ai un NSArray de CalEvents retourné avec le [CalCalendarStore eventPredicateWithStartDate] méthode. Des événements retournés, j'essaye de ne garder que ceux dont le titre de l'événement == @"on call" (insensible à la casse).

Je peux conserver dans le tableau les événements dont le titre inclut@"on call" avec le code suivant (où 'events' est un 'NSArray' rempli avec CalEvents):

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

J'ai essayé d'utiliser 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 procéder?

35
Garry Pettet

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

(Le [c] rend la comparaison d'égalité insensible à la casse.)

106
Cory Kilger

Essayez un prédicat au format @"self.title like[c] 'on call'". L'exemple de code suivant génère 2 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"
10
Vladimir