如何在IOS中使用两个谓词过滤UITableView

时间:2013-03-19 11:53:38

标签: ios objective-c uisearchdisplaycontroller

我有searchDisplayController的tableView。在这个电视我必须阵列(名/姓) 我可以使用谓词,使用此代码

按名称过滤此值
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString];
self.filteredAllClients = [AllClients filteredArrayUsingPredicate:predicate];

我可以使用两个谓词过滤这个数组吗?

例如:我有名字(Jack Stone,Mike Rango)

  1. 如果我进入'J'并且我应该过滤掉阵列 - Jack Stone

  2. 但如果我进入'R'并且我应该过滤区域 - Mike Rango?

1 个答案:

答案 0 :(得分:20)

是的,就像这样......

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];

然后,这将显示所有名字以搜索开头的OR或其姓氏以搜索开头的人。

我更喜欢使用这种格式在单个谓词中使用OR和AND,因为它使整个代码更具可读性。

这也可用于获取谓词的NOT。

如果在单个谓词中构建复合谓词,也会很容易混淆。