UITableView单元格全部重复第一个单元格

时间:2012-08-16 14:13:34

标签: iphone uitableview

我有一个UITableView工作正常,直到我添加了部分 - 现在来自第一个单元格的数据在所有其他单元格中重复。当我删除下面的部分行时,一切都恢复正常。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSInteger sections = self.objects.count;

    return sections;
}

关于可能会发生什么的任何想法?顺便说一句,我的数据源是Core Data。

修改

numberOfRows我返回1.

以下是我如何实施细胞:

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {

Item *p = [[[ItemStore defaultStore] allItems]
                                objectAtIndex:[indexPath row]];

    ItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell"];

    [cell setController:self];
    [cell setTableView:tableView];

    [[cell nameLabel] setText:[p itemName]];
    [[cell serialNumberLabel] setText:[p serialNumber]];
    [[cell valueLabel] setText:[NSString stringWithFormat:@"$%d", [p valueInDollars]]];

    [[cell thumbnailView] setImage:[p thumbnail]];


return cell;
}

2 个答案:

答案 0 :(得分:2)

你可能正在使用

cell.textlabel.text = [self.objects objectAtIndex: indexPath.row];

在你的cellForRowAtIndexPath方法中。

这将在包含一个部分的表视图中工作,因为行号每次都会增加。 但是,如果您有多个部分,则每个部分的第一行的行号将重置为0。 因此,indexPath.row将始终在cellforRowAtIndexPath方法中返回0,因此您每次都会获得第一个对象。 您必须检查您所在的部分,或者甚至使用部分编号作为从阵列中获取正确对象的方法。

编辑:看看你发布的代码,这正是发生的事情!考虑确定您所在的部分,并适当填写。

答案 1 :(得分:1)

这通常是因为在iOS中重用单元格的方式。

确保您在cellForRowAtIndexPath:方法中设置了所有可用选项:

// init cell etc...
cell.textLabel.text = @"Your dynamic text";
cell.textLabel.textColor = [UIColor myColor];
// etc...

return cell;

此外,当您使用核心数据时,请确保从您可能正在使用的NSArrays和NSDictionaries中选择正确的数据。

如果这没有用,请添加更多信息,包括一些代码等。