0

我有一个 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;
}
4

2 回答 2

2

您可能正在使用

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

在您的 cellForRowAtIndexPath 方法中。

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

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

于 2012-08-16T14:27:18.940 回答
1

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

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

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

return cell;

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

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

于 2012-08-16T14:18:17.917 回答