NSpredicate - 以任何顺序搜索单词

时间:2012-11-12 14:10:31

标签: ios regex core-data nspredicate nsfetchedresultscontroller

我让CoreData存储一个对象,其中一个属性字段为“description”,这是一个文本描述。例如description = @“由于意外造成的严重头部创伤”;

我想找到NSPedicate,它会以任何顺序搜索此列,而不是通过单词搜索非精确短语,例如:如果我搜索“意外创伤严重”,我想得到上面的字符串。

-(void)Fetch(){
.......
NSArray *words = [query componentsSeparatedByString:@" "];
req.predicate = [NSPredicate predicateWithFormat:@"description contains[cd] %@ AND description contains[cd] %@ ...",words[0],words[1],[words[2],...];
.....
//execute fetchRequest
//return NSFetchedResultsController;
}

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
 {
  [self Fetch];
  [self.tableView reloadData];
  }

上面的代码有点工作,但我想使用beginwith而不是contains,beginwith似乎不起作用。 另外,我不知道用户可以键入多少单词,因此很难通过单词[0],单词[1]等来形成上面的谓词。

由于

1 个答案:

答案 0 :(得分:0)

你可以将你的句子分成标记(单词,或者可能只是相关单词)并创建不同的实体(如KeyWord)。这样,您的模型将包含这些关键字的数组。然后,您可以执行查询以查找与所有令牌匹配的所有这些模型或至少一个(但是您想要进行搜索)。