0

Coredata と NSFetchedResultsController を使用して、値を保存および取得し、それらをテーブル ビューに表示しています。カスタム ラベルを作成しcellForRowAtIndexPath、属性「lastname」の値を表示しています。しかし、私は間違った値を取得しています。

-(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 に答える