我想实现全文搜索,我的工作是:
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来过滤所有字符,包括数字?
答案 0 :(得分:1)
您无需为BETWEEN运算符创建范围,只需一个简单的数组:
NSString* start = @"a";
NSString* stop = [start stringByAppendingString:@"zzz"];
NSPredicate *betweenPredicate = [NSPredicate predicateWithFormat: @"attributeName BETWEEN %@",
[NSArray arrayWithObjects:start, stop, nil]];
答案 1 :(得分:0)
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.