0

プロジェクトでCustomTableCellを使用しています。「dequeueReusableCellWithIdentifier」がメソッド「cellForRowAtIndexPath」で有効なセルを返していることがわかります。たとえば、テーブルがリロードされるたびにそうなるはずです。

CustomTableCellには、再ダウンロードせずに再利用したい画像がいくつかあります。ただし、「didSelectRowAtIndexPath」デリゲートメソッド内で使用すると、「dequeueReusableCellWithIdentifier」で「nil」を取得するたびに発生します。

元のテーブルは破棄されませんでした。テーブルはクラスオブジェクトであり、「didSelectRowAtIndexPath」パラメータで受け取ったtableViewと同じであることがわかります。

この動作は、テーブルビューを使用したプロジェクトのビューコントローラーと一致しています。

ARCを使用しています。何が間違っている可能性があるか考えていますか?

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

4

1 に答える 1

2

質問は少しあいまいですが、「didSelectRowAtIndexPath」内からカスタムセルにアクセスしようとしているだけだと思います。この場合は、以下を利用する必要があります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableCell *myCell = (CustomTableCell*)[tableView cellForRowAtIndexPath:indexPath];
}

そうすれば、カスタムセルの任意の部分に自由にアクセスできます。

好奇心旺盛な方へ:

「dequeueReusableCellWithIdentifier」は、可視範囲を超えて「移動」したテーブルセルを再利用することにより、オブジェクトの割り当てと割り当て解除の量を減らすために使用されます。つまり、1000個のセルを持つテーブルがあるが、常に10個しか表示されない場合。〜10個のセルが作成され、何度も再利用されます。したがって、dequeueReusableCellWithIdentifierが呼び出されると、現在使用されていないセルのスタックからこれらのセルの1つをプルするか、スタックが空の場合はセルを作成します。

于 2012-08-11T21:16:41.413 に答える