2

セル内のウィジェットの一意のプロパティ値を作成するために、テーブルビューセルと一意のまたは、の間に1対1のマッピングを作成するために、ここで提案されている方法よりも優れた方法はありますか?NSIndexPathNSUIntegerinttagUIProgressView

リンクは、との間で変換するカテゴリ拡張を介してメソッドを追加しますがUIKit、それらは特定の行数未満でのみ機能します。NSIndexPathint

確かに、私はその制限にぶつからないかもしれませんが、誰かが思いついたマッピングがあり、それが任意の数の行で機能することを保証できるかどうか疑問に思っています。

4

2 に答える 2

2

いいえ、実際には、任意の数の行で機能することが保証されている方法はありません。それぞれが30億行の2つのセクションを持つテーブルがある場合、それらの60億の潜在的なNSIndexPathを40億の32ビットNSIntegerにマップする方法はありません。

(64ビットアプリを作成している場合、同じことが当てはまりますが、この例では、数値をさらに40億倍大きくする必要があります。)

リンクした例では、セクションごとに10,000行の制限を使用しています。それよりも多くの行があるのではないかと深刻に心配している場合は、より大きな定数を使用できます。つまり、4,000を超えるセクションがないことがわかっている場合は、最大行数として1,000,000を使用できます。

もちろん、「実際のプログラマー」はおそらく65536を定数として使用することに注意してください。

于 2009-12-05T03:26:18.813 に答える
0

これを行う必要がある場合は、セクションパスを32ビット整数の半分にシフトし、行部分をもう一方にシフトするだけです。はい、これは、1行に65535を超える要素を含めることができないことを意味します(行/セクションが負になることはないため、分割時にunsigned intsを想定しました)が、必要以上に大きな想定制限を採用します。いつでも定和。

さらに、計算が安価です。

通常、この状況では、テーブルビューコントローラーを各セルのデリゲートとして設定し、セルは、セルの作成に使用されたいくつかのキー値とともに、変更を加えてコントローラーをコールバックできます-結局のところ、セルにデータを入力するときにデータセットにアクセスして値を引き出す方法を知っている。ちなみに、IndexPathをセルに格納するだけで、それを使ってコールバックすることもできます。IndexPathアプローチまたはNSIndexPathをタグにフラット化する以前のアプローチを使用しない理由は、行を動的に変更し始めると、セルを作成したNSndexPathと現在のデータセットの値の間で値が整列しなくなる可能性があるためです。常に論理的に正しいデータに戻ることができるある種のキーを持っている方がはるかに良いです。

于 2009-12-06T00:08:31.037 に答える