問題タブ [reuseidentifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
32030 参照

iphone - iPhone - reuseIdentifiers (UITableViewCell) とは何ですか?

公式ドキュメントから:

再利用識別子は、テーブル ビューのデリゲートが (パフォーマンス上の理由から) テーブル ビューの複数行の基礎として再利用する目的で作成する UITableViewCell オブジェクトに関連付けられています。initWithFrame:reuseIdentifier: でセル オブジェクトに割り当てられ、その後変更することはできません。UITableView オブジェクトは、現在再利用可能なセルのキュー (またはリスト) を維持し、それぞれに独自の再利用識別子があり、dequeueReusableCellWithIdentifier: メソッドでデリゲートがそれらを利用できるようにします。

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/reuseIdentifier

私はこれを理解していません。UITableViewCells を作成し、新しいもの (またはそのようなもの) を作成する代わりに、できるだけ多くを再利用しようとする基本的な考え方は理解できます。しかし、セルが再利用可能かどうかを正確に決定するものは何ですか? 2 つの同一の (視覚的に) セルがあるが、テキストが異なる場合 (完全に同一ではないと思います)、それらは両方とも同じ識別子を持つことができますか? それとも、別のものを用意する必要がありますか? または、どのような状況で異なる識別子を使用することになっていますか?

誰かがそれがある場所を明確にしたり、リンクしたりできますか?

0 投票する
8 に答える
15819 参照

ios - キャッシュされた UITableViewCell を消去する方法

キャッシュを消去する方法について誰か提案がありますUITableViewCellか?

これらのセルを reuseIdentifier でキャッシュしたいと思います。ただし、テーブルの行の一部を削除または変更する必要がある場合があります。reloadData行が変更された後に呼び出すことを期待しています。

現在、dequeueReusableCellWithIdentifier常に以前からキャッシュされた (廃止された) エントリを返します。キャッシュが古く、パージする必要があることを示すにはどうすればよいですか?

0 投票する
3 に答える
35007 参照

iphone - UITableView dequeueReusableCellWithIdentifier 理論

Apple が最初の iPhone 用に を開発したUITableViewとき、スクロール時のパフォーマンスに問題がありました。その後、ある賢いエンジニアが、オブジェクトの割り当てには代償が伴うことが原因であることを発見し、セルを再利用する方法を思いつきました。

「オブジェクトの割り当てにはパフォーマンス コストがかかります。たとえば、ユーザーがテーブル ビューをスクロールするときなど、割り当てが短期間に繰り返し発生する必要がある場合は特にそうです。新しいセルを割り当てる代わりにセルを再利用すると、テーブル ビューのパフォーマンスが大幅に向上します。」

出典: iOS リファレンス ライブラリ

使用するセルを再利用するには:

さて、私が疑問に思っているのは、実際にここで何が起こっているのでしょうか? その識別子を持つセルがあり、それを返すだけの場合、TableView を調べますか? そうですね、しかし、割り当てではなく参照を送信し、同じ識別子を持つ4つのセルがすべて表示されているとしましょう。割り当てずに 4 つのインスタンスに自分自身を増やすにはどうすればよいでしょうか?

私はカレンダータイプのコンポーネントを構築しており、すべてのセルが同じ構造でテキストのみが変更されているため、これを知りたいです。したがって、割り当ての代わりにセルを再利用できれば、パフォーマンスが向上する可能性があると思います。

私自身の理論では、4 つのセルを割り当てるというものです (単純に割り当てられているため)。セルが画面から消えると、TableView 再利用キューに入れられます。新しいセルが必要な場合、同じ識別子を持つセルが利用可能かどうかをキューで調べ、prepareForReuseそのセルでメソッドを呼び出し、キューから自身を削除します。

0 投票する
1 に答える
118 参照

cocoa-touch - UITableViewCell を再利用できる正確な状況はどのようなものですか?

セルを再利用できる正確な状況は何ですか ( UITableViewクラスdequeueReusableCellWithIdentifierで使用)?

0 投票する
1 に答える
165 参照

iphone - Nibからロードされたときにカスタムセルがキューに入れられることはありませんか?

次のロジックを使用して、カスタム セルを UITableView にロードしています。

しかし、これにより、 dequeueReusableCellWithIdentifier:cust は常に nil を返し、そもそもキューに入れられていないため、キューに入れられたセルを再利用する方法がないことに気付きました。ペン先からセルをロードしても、フレームワークにはその識別子「cust」について何も通知されません。その結果、ペン先からのロードが常に行われ、何らかの形で処理が遅くなると思います。間違っている場合は修正してください。

nib の読み込みを viewDidLoad 関数で 1 回だけ実行して、毎回実行する代わりに上記で使用できるようにしようとしましたが、何らかの理由でテーブルの最後のセルだけが適切に構築されます。他は白です。

誰かがこれについて洞察を持っていることを願っています。

乾杯AF

0 投票する
2 に答える
9714 参照

ios - UITableView とセルの再利用

私は a を持っていて、UITableViewサブクラス化したUITableViewCell( it と呼ばれるCustomCell) ので、いくつかのラベルとUIImageView.

特定のセルのみが実際に画像を表示します。これが私のコードですtableView:cellForRowAtIndexPath:

homeImageViewそのため、設定した辞書で対応する画像が見つかった場合にのみ設定します。これは最初のいくつかのセルで機能するようですが、リストをスクロールすると、セルに画像があるべきではないときに画像があることがわかります。

これはおそらくセルが再利用されているためだと理解してhomeImageViewいますが、セルが作成/再利用された後に設定していますか?!

CustomCell クラスの init メソッドは次のとおりです。

0 投票する
1 に答える
1586 参照

objective-c - Objective-c: [self.tableview reloadData] データをリロードしますが、古いセルはクリアしません

私はテーブルビューに取り組んでおり、セルを動的に作成する初心者です(以前はIBで作成してから、テーブルビューセルコントローラーなどにリンクしていました..)。

すべてがうまく機能し、受け入れられた配列は適切に更新されますが、[self.tableview reloadData] を起動すると、プログラムは古いセルに新しい値を再描画するだけです。たとえば、セル内の uilabel に "TEST CELL" 値がある場合、データを "CELL TEST" に更新して reloadData を起動すると、uilabel は 2 つのラベルが重なり合っているように見え、両方の値が表示されます。(まったく同じ位置と同じサイズの 2 つの uilabel を作成し、それらの値を設定するようなものです)

そして、このイベントは reloadData を起動するたびに発生し、リロードごとに、プログラムは古いものの上に別の uilabel を追加しているように見えます。ここに私のコードがあります:

}

コンポーネントをサブビューに追加した後にコンポーネントを解放していますが、reuseidentifier に何か問題があるかどうかを考えています...

助けてくれてありがとう。

0 投票する
3 に答える
907 参照

iphone - テーブルビューをスクロールするとクラッシュする

メモリの割り当て解除と解放されたオブジェクトへのメッセージ送信という、単純でありながら厄介な問題に直面しています。

Web ページから RSS フィードを取得しようとしています。アプレットを 2 段階で開発しました。ステージ 1 では、まだ iphone 開発に慣れていないので、Web ページから Rss フィードのテキスト部分を取得しようとしましたが、問題はありませんでした。ステージ 2 では、画像へのリンクを取得し、後で各 UITableViewCell と詳細ビューの両方に表示しようとしました。

私はrssをロードし、私が返す可変配列の解析と返却を担当するクラスを持っています[array copy]。読み込みに時間がかかりますが、すべて正常に動作します。アプリを実行してテーブル ビューをスクロールしようとすると、クラッシュして NSZombie メッセージが表示されます。

objc[37372]: FREED(id): 解放されたオブジェクトに送信されたメッセージ保持 = 0x3930cd0

これは、スクロールせずにdetailViewControllerを読み込もうとしたときにも発生し、tableViewControllerの一部を投稿して何が問題なのかを確認します。

ポスト クラッシュはいくつかの NSMutableString と UIImage であり、それらはすべて独自の init で割り当ておよび初期化され、独自の dealloc メソッドで割り当て解除されます。スクロールせずにセルをタップしようとすると問題が発生しますが、それは明日の問題です。

0 投票する
1 に答える
958 参照

uitableview - UITableViewCell (XIB で作成) の異なるインデックスに異なる reuseIdentifier を割り当てる方法

XIB を使用してセルを正常に作成およびリンクしましたが、クエリは、UITableView の異なるセルに異なる識別子 (reuseIdentifier) を割り当てるにはどうすればよいですか? サインアップ フォームの tableView があるとします。最初のセルに識別子「nameCell」、次の「passwordCell」などを指定します。

XIBを使用しなくても、セルの目的をインデックスで特定することでこれを達成できますが、これができるかどうか疑問に思いました。

よろしく、ダネシュ。

0 投票する
3 に答える
1087 参照

ipad - AQGridView でセルが再利用されないようにする

画像のグリッドに AQGridView を使用しています。ダウンロード中の特定の画像にプログレス バーを重ねる必要があります。問題は、その画像セルをスクロールして表示から外すと、進行状況バーが別のセルにも表示されることです。これはセルが再利用されているためだと思います。

特定のセルを再利用しないようにマークする方法はありますか?