2010-06-03 8 views
34

Tengo un NSArray de CalEvents devuelto con el método [CalCalendarStore eventPredicateWithStartDate]. De los eventos devueltos, estoy tratando de mantener solo aquellos en los que el título del evento == @"on call" (no distingue entre mayúsculas y minúsculas).Usando NSPredicate para determinar si una cadena es igual a otra cadena

soy capaz de mantenerse en la matriz aquellos eventos cuyo título incluye @"on call" con el siguiente código (donde 'eventos' es un 'NSArray' poblada de CalEvents):

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

He intentado utilizando una cadena de formato de predicado como:

@"SELF.title == 'on call'" pero esto no parece funcionar.

¿Hay alguna manera más fácil de hacerlo?

Respuesta

99

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

(El [c] hace sensible a las mayúsculas la comparación de igualdad.) Predicado

+11

+1, aunque podría arrojar el modificador '[c]' después de '==' para que no distinga entre mayúsculas y minúsculas. –

+1

Editado para que no distinga entre mayúsculas y minúsculas. –

+0

Simplemente curioso, ¿MATCH [n] funcionará para == cuando se usa sin ningún comodín (* ?.)? – Samuel

10

intento con formato @"self.title like[c] 'on call'". El siguiente código de ejemplo genera 2 cadenas:

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

¿Hay alguna diferencia entre usar '==' y 'like' para las comparaciones de cadenas? – Garry

+0

Parece en su caso el trabajo que ellos mismos. Pero si desea usar comodines en la comparación de cadenas, entonces '==' no funcionará y deberá usar LIKE en su lugar. – Vladimir

Cuestiones relacionadas