2012-04-23 35 views
8

我使用NSPredicate执行搜索,就像我们在搜索任何应用程序时在iPhone上执行搜索一样。NSPredicate for Regular Search

我不得不说,例如4个关键词

  1. 德干
  2. 新德里
  3. 艾哈迈达巴德
  4. 达累斯萨拉姆新德里

我试图与

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"创建谓词 它给我Deccan作为输出。 但问题是,我想每个字从上面的例子中,我需要为 德干高原,新德里,新德里达累斯萨拉姆但艾哈迈达巴德

Stucked输出从小时本期开始与d左右。试图含有的比赛,但我的运气不好..

朝着正确的道路任何帮助真的会感激..

回答

13

谢谢你们您的回复s 这是我想出的

NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText]; 
NSString *predicateString = @"keyword MATCHES[c] %@"; 
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString]; 
1

有两种方法可以让你

  1. 鸿沟steing通过“”和使用您的NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. 或者,更好的方式,使用两个断言:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"] // i mean,'space+d'

所以你会满足这两种可能的情况。

+0

谢谢@尼基塔。它适用于单个静态字符。但举个例子,角色变得动态。如果我输入d,它会出现三个选项,当我键入'del'时,它显示关键字2和4 – 2012-04-23 10:20:49

0

考虑“喜欢”和“匹配”。但请注意,这些操作相对昂贵,并且可能需要大量时间处理大型数据集。

在这个例子中,我假设你想要的是匹配,如果在开始任何用空格分隔单词以“d”

这检查,看看是否关键字要么以“d”开头或者有一个序列其次是“d”

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"] 

这一次使用正则表达式,这是非常相似的(使用正则表达式是最好的套房,您的情况:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"]