我有一个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;
}
答案 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中选择正确的数据。
如果这没有用,请添加更多信息,包括一些代码等。