在NSArray搜索中的NSDictionary

时间:2012-02-17 00:54:59

标签: objective-c ios nsmutablearray nsdictionary uisearchbar

我遇到了一些搜索代码问题。我有一个名为searchedData的NSMutableArray,它包含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中显示条目。

问题在于它永远不会显示任何内容,即使匹配也是如此。 我知道表/字典不是null(我有NSLogged它)所以我不知道为什么它不起作用。

1 个答案:

答案 0 :(得分:4)

您忘记重新加载已将相关数据添加到数据源的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];
}