我正在尝试使用UITableView's
和UISearchDisplayController
过滤NSCompoundPredicate
数据。我有一个带有3个UILabels
的自定义单元格,我想在搜索中全部过滤掉这个单元格,因此要设置NSCompoundPredicate
。
// Filter the array using NSPredicate(s)
NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"SELF.productName contains[c] %@", searchText];
NSPredicate *predicateManufacturer = [NSPredicate predicateWithFormat:@"SELF.productManufacturer contains[c] %@", searchText];
NSPredicate *predicateNumber = [NSPredicate predicateWithFormat:@"SELF.numberOfDocuments contains[c] %@",searchText];
// Add the predicates to the NSArray
NSArray *subPredicates = [[NSArray alloc] initWithObjects:predicateName, predicateManufacturer, predicateNumber, nil];
NSCompoundPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];
但是,当我这样做时,编译器会警告我:
我在网上看到的每个示例都做同样的事情,所以我很困惑。
NSCompoundPredicate orPredicateWithSubpredicates:
方法在最后一个参数中使用了(NSArray *)
,所以我真的很困惑。怎么了?
最佳答案
首先,使用“contains”非常慢,是否考虑Mayber“beginswith”?
其次,您想要的是:
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];
第三,您可以完成以下操作:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.productName beginswith[cd] %@ OR SELF.productManufacturer contains[cd] %@", searchText, searchText];
关于objective-c - NSCompoundPredicate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13647089/