2010-06-03 10 views
34

Mam wartość NSArray CalEvents zwróconą metodą [CalCalendarStore eventPredicateWithStartDate]. Po zwróconych zdarzeniach próbuję zachować tylko te, w których tytuł zdarzenia == @"on call" (bez rozróżniania wielkości liter).Używanie NSPredicate do określenia, czy ciąg znaków jest równy innemu ciągowi znaków

jestem w stanie utrzymać w tablicy te zdarzenia, których tytuł obejmuje@"on call" z następującego kodu (gdzie „wydarzenia” jest „” NSArray zaludnionych z CalEvents):

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

próbowałam przy użyciu łańcucha formatu predykatu, takiego jak:

, ale to nie działa.

Czy jest to łatwiejszy sposób?

Odpowiedz

99

Spróbuj [NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

(The [c] sprawia, że ​​równość porównanie wielkości liter).

+11

+1, chociaż można rzucić modyfikator "[c]" po znaku "==", aby uczynić go niewrażliwym na wielkość znaków. –

+1

Edytowano tak, aby wielkość liter nie była rozróżniana. –

+0

Po prostu ciekawy, czy MATCH [n] będzie pracował dla ==, gdy jest używany bez żadnych (*?) Symboli wieloznacznych? – Samuel

10

Spróbuj orzecznik z formatem @"self.title like[c] 'on call'". Poniższy przykładowy kod wyświetla 2 ciągi:

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

Czy istnieje różnica między używaniem "==" i "like" do porównywania ciągów znaków? – Garry

+0

Wygląda, jak w twoim przypadku, na tę samą pracę. Ale jeśli chcesz używać symboli wieloznacznych podczas porównywania ciągów znaków, "==" nie zadziała, a będziesz musiał użyć LIKE zamiast tego. – Vladimir