NSDictionary в поиске NSArray - PullRequest
       18

NSDictionary в поиске NSArray

0 голосов
/ 17 февраля 2012

У меня проблема с поисковым кодом. У меня есть NSMutableArray, называемый searchedData, который содержит NSDictionaries (по одному на объект). Вот код поиска, который у меня сейчас есть:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [tableData removeAllObjects]; // remove all data that belongs to previous search
    if([searchText isEqualToString:@""]||searchText==nil) {
        [tableView reloadData];
        return;
    }
    int i = 0;
    while (i < [dataSource count]) {
        NSDictionary *coolDict = [searchedData objectAtIndex:i];
        NSString * title = [coolDict objectForKey:@"TITLE"];
        NSString * authorString = [coolDict objectForKey:@"AUTHOR"];

        NSRange titleRange = [[title lowercaseString] rangeOfString:[searchText lowercaseString]];
        NSRange authorRange = [[authorString lowercaseString] rangeOfString:[searchText lowercaseString]];

        if (titleRange.location != NSNotFound || authorRange.location != NSNotFound)
            [tableData addObject:title];
        i++;
    }

    [tableView reloadData];

}

Он находит количество записей, затем переходит к каждой записи, находит объекты для ключей «TITLE» и «AUTHOR», а затем отображает записи в UITableView, если есть совпадение.

Проблема в том, что он никогда ничего не отображает, даже если есть совпадение. Я знаю, что таблица / словари не являются нулевыми (у меня есть NSLogged it), поэтому я не знаю, почему это не работает.

1 Ответ

4 голосов
/ 17 февраля 2012

Вы забыли перезагрузить tableView, добавив соответствующие данные в источник данных.

Я немного улучшил кодирование метода и добавил пропущенную строку.

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [tableData removeAllObjects];// remove all data that belongs to previous search
    if (![searchText isEqualToString:@""] || searchText != nil) {
        int i = 0;
        while (i < [dataSource count]) {
            NSDictionary *coolDict = [searchedData objectAtIndex:i];
            NSString * title = [coolDict objectForKey:@"TITLE"];
            NSString * authorString = [coolDict objectForKey:@"AUTHOR"];

            NSRange titleRange = [[title lowercaseString] rangeOfString:[searchText lowercaseString]];
            NSRange authorRange = [[authorString lowercaseString] rangeOfString:[searchText lowercaseString]];

            if(titleRange.location != NSNotFound || authorRange.location != NSNotFound)
                [tableData addObject:title];
            i++;
        }
    }
    [tableView reloadData];
}
...