9

我有带有searchDisplayController. 在这台电视中,我必须数组(名字/姓氏)我可以通过名称过滤这些值,使用谓词,使用此代码

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

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

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

  1. 如果我输入“J”,我应该得到过滤数组 - 杰克斯通

  2. 但是如果我输入“R”并且我应该得到过滤区域 - Mike Rango?

4

1 回答 1

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 和 AND,因为它使整个代码更具可读性。

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

如果您在单个谓词中构建了复合谓词,您也很容易感到困惑。

于 2013-03-19T12:00:10.660 回答