2014-11-10 27 views
5

Używam następujący NSPredicate do filtrowania,NSPredicate - wielkość liter ma znaczenie dla wielu warunków filtrowania

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(firstName CONTAINS %@) OR (lastName CONTAINS %@ )OR (UserName CONTAINS %@) ", myText,myText,myText]; 
NSArray *filtered = [responseArray filteredArrayUsingPredicate:predicate]; 

To działa dobrze, ale to jest wielkość liter. Potrzebuję, aby filtrowanie było niewrażliwe na wielkość liter.

Próbowałem,

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY firstName CONTAINS %@) OR (ANY lastName CONTAINS %@ )OR (ANY UserName CONTAINS %@) ", myText,myText,myText]; 

Ale to wyrzuca błąd

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.' 

Nie mogę zrozumieć, jak to zostało wspomniane w this answer. Czy ktoś może zasugerować, co mam zmienić w powyższym filtrowaniu?

Odpowiedz

15

Wymień wszystkie CONTAINS na CONTAINS[c]. Litera "c" w nawiasach kwadratowych oznacza wielkość liter. Możesz również użyć "d", aby uczynić go niedodiacitic. Zostało to wyjaśnione w "Przewodniku programowania predykatów".

+0

To działa dzięki. Będę google wszystkie moje problemy z kodowaniem zamiast zobaczyć dokumentację Apple. [Ta odpowiedź] (http://stackoverflow.com/a/1669433/756941) skłoniła mnie do użycia słowa kluczowego "KAŻDY" dla rozróżniania wielkości liter. Dodaj link tam, gdzie jest wspomniany w przewodniku programowania predykatów .. – NAZIK

Powiązane problemy