如何修改此谓词,以便有效地处理多个关键字

时间:2012-10-30 04:41:56

标签: objective-c xcode4.5

我有这个谓词:

NSPredicate * thePredicateKeyword = [NSPredicate predicateWithFormat:@"any keywords.thekeyword beginswith [cd] %@", searchTerm];

基本上每个企业与关键字有很多关系。

但是假设我没有一个searchTerm。说我有一个阵列。

我该怎么做?

我想我可以为每个做出谓词并将它们与谓词等结合起来

但是,是否可以使用in关键字或类似内容更有效地执行此操作?

2 个答案:

答案 0 :(得分:3)

返回类似这样的函数怎么样:

-(NSPredicate *)createCompoundPredicateForSearchTerms:(NSArray *)searchTerms
{
  NSMutableArray *subPredicates = [[NSMutableArray alloc] init];

  NSEnumerator *searchTermEnum = [searchTerms objectEnumerator];
  NSString *searchTerm;
  while (searchTerm = [searchTermEnum nextObject]) {
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keywords.thekeyword beginswith [cd] %@", searchTerm];
    [subPredicates addObject:predicate];
  }

  return [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
}

答案 1 :(得分:0)

这就是我实际使用的。然而,我选择的anwer是激发它的灵感。

NSArray * keywords = [searchTerm componentsSeparatedByString:@" "];

NSMutableArray * keywordPredicates = [NSMutableArray array];

for (NSString * aKeyword in keywords) {
    NSPredicate * thePredicateKeyword = [NSPredicate predicateWithFormat:@"any keywords.thekeyword beginswith [cd] %@", aKeyword];
    [keywordPredicates addObject:thePredicateKeyword];
}

NSPredicate * thePredicateKeyword = [NSCompoundPredicate orPredicateWithSubpredicates:keywordPredicates];

return thePredicateKeyword;