1

cellForRowAtIndexPathを約9回トリップした後、コードがif(cell == nil)をスキップする問題が発生しています。次に、テーブル内のアイテムが繰り返され始め、9アイテムごとに繰り返されます。if(cell == nil)行を削除すると、すべてのデータが正しい順序で表示され、テーブルが美しく表示されます。ただし、表の一番下までスクロールすると、アプリがクラッシュするため、適切な解決策ではありません。何かアイデアはありますか?

ありがとうございました!

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];     


    NSString *temp = [[views objectAtIndex:indexPath.row] objectForKey:@"racer"];
    NSString *val = [[views objectAtIndex:indexPath.row] objectForKey:@"pointsScored"];

    // Set up the cell...
    cell.textLabel.text = temp;
    cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
    cell.detailTextLabel.text = val;

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    [temp release];
    [val release];

    }

    return cell;
}
4

1 に答える 1

0

KLevSki、

dequeueReusableCellWithIdentifierこれは、iPhoneプラットフォームで優れているテーブルビューセルを再利用しているためです。何が起こるかこれは:

1)セルはif (cell==nil)セクション に作成されます

2)多数のセルが作成されると(この場合、画面に表示されるセルの数に基づいて9つ)、OSは、一意のテーブルを作成する代わりに、テーブルセルを優れたメモリマネージャーとして再利用し始めます。メモリを大量に消費する可能性のあるすべての行のセル

3)セルは再利用されているため、if (cell==nil)ブロック後のセクションで行う必要があるのは、各セルの情報を更新/変更することだけです。

例として...アイコンとラベルのみを含むセルを作成した場合、セルをスクロールして表示するたびに、アイコンとラベルをそのセルに適した画像/文字列に更新します。

あなたの場合:

...

if (cell == nil) {

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];     

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}

// update cell
cell.textLabel.text = [[views objectAtIndex:indexPath.row] objectForKey:@"racer"];
cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
cell.detailTextLabel.text = [[views objectAtIndex:indexPath.row] objectForKey:@"pointsScored"];

return cell;
于 2010-07-12T19:29:08.830 に答える