2010-06-03 8 views
34

Ho un NSArray di CalEvents restituito con il metodo [CalCalendarStore eventPredicateWithStartDate]. Dagli eventi restituiti, sto cercando di mantenere solo quelli in cui il titolo dell'evento == @"on call" (maiuscole/minuscole).Utilizzo di NSPredicate per determinare se una stringa è uguale a un'altra stringa

sono in grado di mantenere nella matrice quegli eventi il ​​cui titolo include@"on call" con il seguente codice (in cui 'eventi' è un 'NSArray' popolato con CalEvents):

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

ho provato utilizzando una stringa di formato di predicato come:

@"SELF.title == 'on call'" ma questo non sembra funzionare.

C'è un modo più semplice per farlo?

risposta

99

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

(Il [c] rende il confronto di uguaglianza case-insensitive.) Predicato

+11

+1, sebbene si possa lanciare il modificatore '[c]' dopo '==' per renderlo non sensibile al maiuscolo/minuscolo. –

+1

Modificato senza distinzione tra maiuscole e minuscole. –

+0

Solo curioso, MATCH [n] funziona per == se usato senza alcun carattere jolly (*?)? – Samuel

10

Prova con il formato @"self.title like[c] 'on call'". Il seguente codice di esempio produce 2 stringhe:

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

Esiste una differenza tra l'uso di '==' e 'like' per i confronti tra stringhe? – Garry

+0

Sembra che nel tuo caso il lavoro sia lo stesso. Ma se si desidera utilizzare i caratteri jolly nel confronto tra stringhe, '==' non funzionerà e sarà necessario utilizzare LIKE. – Vladimir

Problemi correlati