そもそもなぜ細胞をパージしようとしているのかわからない。セルをデキューするたびに、表示する必要があるデータを再設定する必要があります。キャッシュにより、変更されないプロパティを毎回設定する必要がなくなります。ただし、セルが以前にキャッシュされていたとしても、表示されている実際のデータを設定する必要があります。
再利用識別子は、同じタイプのすべてのセルで同じである必要があることに注意してください。問題の行に基づいて識別子を計算するなど、ばかげたことをしている場合は、間違っています。
コードは次のようになります
- (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *identifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:識別子];
もし (!セル) {
// キャッシュされたセルがないため、ここで新しいセルを作成します
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
// アクセサリやテキストの色など、そのようなすべてのセルが共有するプロパティを設定します
}
// この特定のセルにデータを設定します
cell.textLabel.text = @"foo";
セルを返します。
}
その例では、毎回セルのデータを常に設定しており、すべてのセルが同じ識別子を共有していることに注意してください。このパターンに従えば、古いデータはいずれにせよ上書きされるため、セルを「パージ」しようとする理由はまったくないはずです。複数の種類のセルがある場合、その場合は複数の識別子を使用したい場合がありますが、それでもセルの種類ごとに 1 つの識別子です。