Tableview未显示正确的数据

时间:2012-12-26 10:08:24

标签: iphone objective-c ios tableview uisearchbar

我正在尝试使用搜索功能实现tableview。我有一个功能,看看每个项目的第一个字母。然后对于每个唯一字母,它将其添加到另一个数组中。因此,如果它们是以“S”开头的项目,它只会添加字母“S”一次。

然后使用这个数组我将构建我的section和rowsForSections。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int rows = 0;
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        //---get the letter in each section; e.g., A, B, C, etc.---
        NSString *alphabet = [firstIndex objectAtIndex:section];
        //---get all states beginning with the letter---
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name beginswith[c] %@", alphabet];
        NSArray *names = [self.filteredListContent filteredArrayUsingPredicate:predicate];
        //---return the number of states beginning with the letter---
        rows =  [names count];
    }
    else
    {
        //---get the letter in each section; e.g., A, B, C, etc.---
        NSString *alphabet = [firstIndex objectAtIndex:section];
        //---get all states beginning with the letter---
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name beginswith[c] %@", alphabet];
        NSArray *names = [self.listContent filteredArrayUsingPredicate:predicate];
        //---return the number of states beginning with the letter---
        rows =  [names count];
    }
    return rows;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    int rows = 0;
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        rows = [filteredFirstIndex count];
    }
    else
    {
        rows =  [firstIndex count];
    }
    return rows;
}

这是我的CellForRowAtIndex

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"list content %@",[listContent valueForKey:@"name"]);
    static NSString *kCellID = @"cellID";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellID];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    /*
     If the requesting table view is the search display controller's table view, configure the cell using the filtered content, otherwise use the main list.
     */
    Contact *contact = nil;
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        contact = [self.filteredListContent objectAtIndex:indexPath.row];
    }
    else
    {
        contact = [self.listContent objectAtIndex:indexPath.row];
    }

    cell.textLabel.text = contact.name;
    return cell;
}

问题 这是我的问题的截图。因为一张图片说的超过1000个字。

enter image description here

希望有人能帮助我!

亲切的问候!

1 个答案:

答案 0 :(得分:0)

这些问题产生了问题:

    contact = [self.filteredListContent objectAtIndex:indexPath.row];

    contact = [self.listContent objectAtIndex:indexPath.row];

因为您要在部分中显示名称。

在每个部分中,indexPath.row值从0开始。

这就是你得到这个结果的原因。

以下不是一个好的解决方案。但举个例子我发布了它。 (这会导致性能问题) 在cellForRowAtIndexPath

中使用它
NSString *alphabet = [firstIndex objectAtIndex:indexPath.section];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name beginswith[c] %@", alphabet];
NSArray *names = [self.filteredListContent filteredArrayUsingPredicate:predicate];
contact = [names objectAtIndex:indexPath.row];