【问题标题】:How to create a NSPredicate which filters all characters in given range including digits/numbers?如何创建一个 NSPredicate 过滤给定范围内的所有字符,包括数字/数字?
【发布时间】:2012-02-18 01:08:46
【问题描述】:

我想实现全文搜索,我要做的是:

NSString* start = @"a";
NSString* stop = [start stringByAppendingString:@"zzz"];
NSArray* range = [NSArray arrayWithObjects:[NSExpression expressionForConstantValue:start],[NSExpression expressionForConstantValue:stop],nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY keyword.word BETWEEN %@",range];

Start 是可变的,并且会根据我输入的内容而变化(即,如果我输入“cool”,则表示 start=@"cool",stop 将是 @"coolzzz")。

现在这很好用,直到我的输入是数字或数字并且 NSPredicate 不返回任何结果,即使有。

例如,在我的数据中,我有形状为 entry_name 1、entry_name 2 的条目。如果我输入 entry_name,我会得到所有结果,但是一旦我输入 entry_name 1,我就不会得到任何结果。

经过测试,我发现如果我只输入 1,我不会得到任何结果,因此 NSPredicate 不起作用。

如何编写一个过滤所有字符(包括数字)的 NSPredicate?

【问题讨论】:

    标签: objective-c ios cocoa-touch nspredicate


    【解决方案1】:

    您不需要为 BETWEEN 运算符创建范围,一个简单的数组就足够了:

    NSString* start = @"a";
    NSString* stop = [start stringByAppendingString:@"zzz"];
    NSPredicate *betweenPredicate = [NSPredicate predicateWithFormat: @"attributeName BETWEEN %@",
                                         [NSArray arrayWithObjects:start, stop, nil]];
    

    另见Predicate Programming Guide

    【讨论】:

      【解决方案2】:
          NSString *searchText=@"string u want to search";
      
      NSArray *range = [NSArray arrayWithObjects:@"entry_name 1",@"entry_name 2",@"entry_name 3",@"entry_name 4",@"entry_name5",nil];
      NSMutableArray *match = [[NSMutableArray alloc] init];
      for (int i=0; i<[range count];i++)
      {
          NSString *sTemp = [range objectAtIndex:i] ;
          NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
      
          if (titleResultsRange.length > 0)
              [match addObject:sTemp];
      }
       NSLog(@"match= %@",match);
      
       use above code for searching.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 2013-08-21
        相关资源
        最近更新 更多