我正在尝试使用UITableView'sUISearchDisplayController过滤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/

10-11 05:03