NSMutableArray search - PullRequest
       15

NSMutableArray search

0 голосов
/ 29 декабря 2011

У меня есть UISearchBar, и я выполняю поиск по массиву и показываю результат. Поиск работает идеально для первой буквы, но приложение вылетает, когда я добавляю букву в поиск или даже когда я нажимаю клавишу Backspace. Вот код, который я использую:

for (NSString *sTemp in arrCatSearch)
    {
        NSRange titleResultsRange = [sTemp rangeOfString:strSearch options:NSCaseInsensitiveSearch];

        if (titleResultsRange.length > 0)
            [searchArray addObject:[catalog.catalogItems objectAtIndex:i]];
        i++;
    }  

Приложение вылетает в строке NSRange.

Ответы [ 3 ]

0 голосов
/ 29 декабря 2011

Я думаю, что это должно дать вам лучший результат.

if ([sTemp rangeOfString: strSearch options: NSCaseInsensitiveSearch].location != NSNotFound)
{
    if (![searchArray containsObject: [catalog.catalogItems objectAtIndex: i]])
    {
        [searchArray addObject: [catalog.catalogItems objectAtIndex: i]];
    }
}
0 голосов
/ 29 декабря 2011

Поиск в массиве результатов должен выполняться с помощью класса NSPredicate:

        NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@",searchBar.text];

    //filter array based on the predicate
   searchArray = [arrCatSearch filteredArrayUsingPredicate:filterPredicate];
0 голосов
/ 29 декабря 2011

Я использую NSRange, например:

NSRange result = [searchString rangeOfString:searchBar.text options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];

в методах делегатов панели поиска

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
...