UITableView
は通常、 のインスタンスを再利用するためUITableViewCell
、'-tableView:cellForRowAtIndexPath:
メソッドがセルのすべての属性を適切に設定するようにする必要があります。そうしないと、古いデータが存続する可能性があります。私はこれがあなたの問題かもしれないと推測しており、あなたのコードを完全に見ていません。
したがって、次のようなものです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellIdentifier = @"TheCellIdentifier";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
ShoppingObject* shopping = [self.myShoppingList objectAtIndex:indexPath.row];
UIImageView* accessoryView = nil;
if (shopping.isDone) {
accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tick_btn"]];
}
cell.accessoryView = accessoryView;
return cell;
}
再利用キャッシュから、または新しいキャッシュを作成することによって、セルを取得します。次に、データ モデルの状態をチェックして、その行で表されているオブジェクトのショッピングが完了したかどうかを確認し、ショッピングが完了した場合はイメージを取得します。ショッピングは行われておらず、accessoryView が作成されていないことに注意してください。そのため、ShoppingObject の状態がそのテーブル行で表されていても、そのセルの accessoriesView は正しく設定されます。
したがって、私がおそらくあなたの中で行うことは、-tableView:didSelectRowAtIndexPath:
すべて-reloadData
が正しく更新されるようにテーブルの上に置くことです.