日々精進

新しく学んだことを書き留めていきます

UITableViewで何もデータをセットしていないセルの値がおかしくなる

UITableViewはセルを再利用しているので、「何もデータを表示しない」セルであってもセル内のラベルなどに初期値を代入しないと前回代入した値が残ってしまう。
下記のようにif (cell == nil)のelse句に初期化コードを書くべき。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"StockAttributeCell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault 
                 reuseIdentifier:CellIdentifier] 
                autorelease];
    } else {
        cell.textLabel.text = @""; //ここでセルを初期化
    }
    
    return cell;
}