0

我正在使用 Coredata 和 NSFetchedResultsController 来存储和检索值并在表格视图中显示它们。我正在创建自定义标签cellForRowAtIndexPath并显示属性“姓氏”的值。但我得到了错误的价值观。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *label = nil;
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
    label = [[[UILabel alloc]initWithFrame:CGRectMake(160,10,120,21)]autorelease];
    label.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview:label];

    //Configure the cell
    List *list = [self.fetchedResultsController objectAtIndexPath:indexPath];
    label.text = list.lastname;

}
[self configureCell:cell atIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleGray;
return cell;
}

奇怪的是,如果我删除UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];线和 if 条件,它工作正常。

4

1 回答 1

0

你需要搬家

label.text = list.lastname;

之外

if(cell == nil)

原因是,里面的内容if(cell == nil)只会被调用 x 次,其中 x 是屏幕上可见单元格的数量。当您滚动时,新单元格正在被重复使用,这就是它们包含一些不正确值的原因。

编辑:

您还需要移动您的

List *list = [self.fetchedResultsController objectAtIndexPath:indexPath];

之外if

编辑2:

它应该是这样的:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *label = nil;
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
    label = [[[UILabel alloc]initWithFrame:CGRectMake(160,10,120,21)]autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.tag=1;
    [cell.contentView addSubview:label];


}
[self configureCell:cell atIndexPath:indexPath];

//Configure the cell
List *list = [self.fetchedResultsController objectAtIndexPath:indexPath];
label = (UILabel*)[cell.contentView viewWithTag:1];
label.text = list.lastname;

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleGray;
return cell;
}

这应该适合你

于 2013-04-29T14:24:18.290 回答