XCodeウィザードで作成されたマスター/ディテールプロジェクトには、dequeueReusableCellWithIdentifier:forIndexPath:
を呼び出したtableView:cellForRowAtIndexPath:
の実装が含まれています。次に、独自のカスタムメソッドconfigureCell
を呼び出して、有効なデータでセルコントロールを埋め込み、呼び出し元にセルを返します。私が理解しているように、これはどのようにテーブルがその細胞の内容を描くかを知っている方法です。tableView:cellForRowAtIndexPath:はどのように使われますか?
私が理解できないことは、自分のコードからセルを取得するときにどのように使用するかです。そして、それは私のコードによって呼び出されることになっているのでしょうか?それとも、それはテーブルフレームワーク自体によって使用されるコールバックですか?
たとえば、セル内の1つのラベルのテキストを変更する場合は、tableView:cellForRowAtIndexPath:
を呼び出して、結果のセルオブジェクトコントロールで必要なものを変更することができます。しかし、tableView:cellForRowAtIndexPath:
を呼び出すと、実際には新しいセルオブジェクトが作成され(おそらく未使用のセルオブジェクトのプールから再利用されます)、イメージビューやラベルのようなすべてのコントロールをデータで埋めます。これはパフォーマンスに関して、私が1つのラベルだけを変更したいときには、私には良く見えません。
のうちconfigureCell
を削除できますか?しかし、[table reloadData]
が呼び出されたときに、どのようにすべてのセルの内容がシステムによって再描画されるかを確認する方法はありますか?
P.S.この種のコード作成 XCodeの7ウィザード:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
[self configureCell:cell withObject:object];
return cell;
}
// Then later in controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] withObject:anObject];
break;
configureCell
は二度ここに呼ばれています。私には意味がないようです。私は、少なくともウィザードのコードを書いている人が、これがどのように動作するはずかを理解することを望んでいました。
この呼び出しは、テーブルフレームワークでのみ使用されます。 reloadRowsAtIndexPathsを呼び出して、特定の行を更新するために1行だけを送信することができます。 –