0

画像を表示するテーブルがあります。ライブで検索でき、表示されているセルを調整します。NSOperationイメージがまだすぐに利用可能になっていない場合、イメージはネットワーク上の同時サブクラスを使用してバックグラウンドでロードされます。

画像を取得したら、テーブルを更新して表示したいと思います。

どうすれば正しいセルを更新できますか?

  • tableView:cellForRowAtIndexPath:セルが別の行に転用された可能性があるため、組み込みのセルに依存することはできません。
  • 検索語の変更により更新が開始されてから変更されている可能性があるため、にindexPath渡されたものを信頼することはできません。tableView:cellForRowAtIndexPath:
  • セル自体がインスタンスでUITableViewCellあり、メタデータがないため、テーブルに表示されているセルを検索できません。
  • 変更を適用するテーブルがわからないため、フィルタリングされたリストを検索できません。

私は何が欠けていますか?

4

2 に答える 2

2

私はアプリストアのアプリでこの正確な操作を行います。View Controllerで、画像が到着したときに通知を受け取る通知ハンドラーを作成しました。その画像にはタグが関連付けられています。これを必要とするビューにマップできます。

セルが作成されたら、UIImageViewをcontentViews配列に追加し、画像に関連付けられたタグと一致する一意のタグを付けます(競合を避けるために、これらを10,000などでオフセットできます)。

次に、UITableViewに表示されているセルの配列を要求します。それらを繰り返し処理し、各セルのcontentViewにviewWithTag:tag(一意のタグ)を要求します。見つかった場合は、適切なUIImageViewがあり、画像を設定します。

明らかに、tableViewにセルを提供するときは、常に適切なタグをImageViewに提供する必要があります。

于 2012-07-25T21:55:43.120 に答える
1

最も簡単な解決策は、おそらくUITableViewCellをサブクラス化して追跡プロパティを追加することです。このようなもの:

@interface TrackingTableViewCell : UITableViewCell
@property (strong) id trackingValue;
@end;

@implementation TrackingTableViewCell
// Default @synthesize as of Xcode 4.4!
@end

セルを設定するときは、trackingValueをNSURLURLのダウンロード元に設定します。画像の読み込みが終了したら、表示されているセルのtrackingValueを確認します。一致するものを見つけたら、すばらしい。そうでない場合は、どこにも設定しないでください。

理論的にはAPIで同じことを行うことができますがobjc_setAssociatedObject()、値を追跡するための単純なサブクラスを作成するだけでは、それを行うことの価値はわかりません。

于 2012-07-25T21:58:45.120 に答える