2013-03-19 10 views
9

Mam tableView z searchDisplayController. W tym telewizorze mam do tablic (imiona/nazwiska) można filtrować te wartości według nazw, za pomocą predykatu z tym kodemJak filtrować UITableView z dwoma predykatami w IOS

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString]; 
self.filteredAllClients = [AllClients filteredArrayUsingPredicate:predicate]; 

mogę filtrować to tablice przy użyciu dwóch predykatów?

Na przykład: mam nazwy (Jack Stone, Mike Rango)

  1. Jeśli I`m wejściu 'J' i powinien dostać filtrowane Array - Jack Kamień

  2. ale jeśli Wchodzę w "R" i powinienem dostać filtrowany obszar - Mike Rango?

+1

Czy jest jakiś problem z używaniem 'OR' /' AND' dla kilku warunków? –

Odpowiedz

20

Tak, tak ...

NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString]; 
NSPredicate *lastNamePredicate = [NSPredicate predicateWithFormat:@"self.lastName beginswith[cd]%@",searchString]; 

NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[firstNamePredicate, lastNamePredicate]]; 

self.filteredAllClients = [AllClients filteredArrayUsingPredicate:compoundPredciate]; 

To pokaże wszystkie osoby, których imiona zaczynają się od wyszukiwania lub których nazwiska rozpoczynają się poszukiwania.

Wolę używać tego formatu do używania obiektów OR i AND w jednym predykacie, ponieważ sprawia to, że ogólny kod jest bardziej czytelny.

Można tego również użyć, aby uzyskać NOT z predykatu.

Możesz łatwo wprawić w zakłopotanie, jeśli masz predykaty złożone zbudowane w jednym orzeczniku.

+0

Dzięki, działa świetnie) – Arthur

+0

Dobra, działa jak – ravinder521986

Powiązane problemy