Как создать NSPredicate, который фильтрует все символы в заданном диапазоне, включая цифры / цифры? - PullRequest
0 голосов
/ 18 февраля 2012

Я хочу реализовать полнотекстовый поиск, и я делаю так:

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];

Старт является переменным и изменяется в зависимости от того, что я печатаю (то есть, если я набираю 'cool', это означает, что start = @ "cool", а останов будет @ "coolzzz").

Теперь это прекрасно работает, пока мой ввод не будет цифрой или числом, и NSPredicate не вернет никаких результатов, даже если они есть.

Например, в моих данных есть записи вида entry_name 1, entry_name 2. Если я ввожу entry_name, я получаю все результаты, но как только я ввожу entry_name 1, я не получаю никаких результатов.

После тестирования я увидел, что если я просто введу 1, я не получу результатов, поэтому NSPredicate не будет работать.

Как я могу написать NSPredicate, который фильтрует все символы, включая цифры?

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Вам не нужно создавать диапазон для оператора BETWEEN, достаточно простого массива:

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

См. Также Руководство по программированию предиката

0 голосов
/ 18 февраля 2012
    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.
...