我有searchDisplayController
的tableView。在这个电视我必须阵列(名/姓)
我可以使用谓词,使用此代码
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.firstName beginswith[cd]%@",searchString];
self.filteredAllClients = [AllClients filteredArrayUsingPredicate:predicate];
我可以使用两个谓词过滤这个数组吗?
例如:我有名字(Jack Stone,Mike Rango)
如果我进入'J'并且我应该过滤掉阵列 - Jack Stone
但如果我进入'R'并且我应该过滤区域 - Mike Rango?
答案 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。
如果在单个谓词中构建复合谓词,也会很容易混淆。