Использование NSPredicate для определения, равна ли строка другой строке - PullRequest
35 голосов
/ 03 июня 2010

У меня есть NSArray CalEvents, возвращенных методом [CalCalendarStore eventPredicateWithStartDate]. Из возвращенных событий я пытаюсь оставить только те, в которых заголовок события == @"on call" (без учета регистра).

Я могу сохранить в массиве те события, заголовок которых включает @"on call" со следующим кодом (где 'events' - это 'NSArray', заполненный CalEvents):

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

Я пытался использовать строку формата предиката, например:

@"SELF.title == 'on call'" но это, похоже, не работает.

Есть ли более простой способ сделать это?

Ответы [ 2 ]

105 голосов
/ 03 июня 2010

Попробуйте [NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

([c] делает сравнение равенства без учета регистра.)

10 голосов
/ 03 июня 2010

Попробуйте предикат в формате @"self.title like[c] 'on call'". Следующий пример кода выводит 2 строки:

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"
...