2010-06-03 5 views
34

Ich habe eine NSArray von CalEvents zurückgegeben mit der [CalCalendarStore eventPredicateWithStartDate] Methode. Von den zurückgegebenen Ereignissen versuche ich, nur diejenigen zu behalten, in denen der Titel des Ereignisses == @"on call" (Groß-/Kleinschreibung nicht beachtet).Mit NSPredate, um festzustellen, ob eine Zeichenfolge gleich einer anderen Zeichenfolge

ich in der Lage bin, diese Ereignisse in der Anordnung zu halten, deren Titel enthält@"on call" mit dem folgenden Code (wobei ‚Ereignisse‘ ist eine ‚NSArray‘ bevölkert mit CalEvents):

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

Ich habe versucht, Verwenden eines Prädikat Format Zeichenfolge wie:

@"SELF.title == 'on call'" aber das scheint nicht zu funktionieren.

Gibt es eine einfachere Möglichkeit, dies zu tun?

Antwort

99

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

(Die [c] der Gleichheitsvergleich Groß- und Kleinschreibung macht.)

+11

+1, obwohl Sie den Modifizierer '[c]' nach dem '==', um es case-insensitive zu machen. –

+1

Editiert, um die Groß-/Kleinschreibung nicht zu beachten. –

+0

Nur neugierig, wird MATCH [n] für == funktionieren, wenn ohne (*?) Platzhalter verwendet? – Samuel

10

Try Prädikat mit Format @"self.title like[c] 'on call'". Der folgende Beispielcode gibt 2 Zeichenfolgen aus:

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

Gibt es einen Unterschied zwischen '==' und 'like' für Stringvergleiche? – Garry

+0

Sieht aus wie in Ihrem Fall die Arbeit sie gleich. Wenn Sie jedoch Platzhalter im Zeichenfolgenvergleich verwenden möchten, funktioniert '==' nicht und Sie müssen stattdessen LIKE verwenden. – Vladimir

Verwandte Themen