0

私はこれをしばらく研究してきましたが、多くの解決策があると思いますが、それらがそれほど優れているかどうかはわかりません. 私が何かを見逃しているのかもしれません:-)

私は2つのテーブルを持っています。TableA の各レコードに対して、TableB には複数のレコードがあります。つまり、一対多の関係です。私はそれをコアデータにマッピングし、クラスを生成しました。ここまでは順調ですね。

テーブル ビュー ベースの UI は、次のようにする必要があります。

Section 1
Cell 1: Table A: field1
Cell 2: Table A: field2
-----
Section 2
Cell 1: Table B: record 1: field1
Cell 2: Table B: record 2: field1
....

セクションtableView:cellForRowAtIndexPath:1 のセルはテーブル A の 1 つのレコードとは異なるフィールドであるため、簡単に処理できます。セクション 2 のセルが異なります。が呼び出されるたびtableView:cellForRowAtIndexPath:に、テーブル A の NSSet から正しいテーブル B レコードを取得する必要があります。そして、それが問題です。

NSSet docoは、注文を保証しないことを示します。つまり、インデックスに基づいて特定のレコードが必要な場合、いくつかの可能な手法があります。

  • コア データ クエリに並べ替え記述子を追加し、高速列挙を使用して必要なレコードを取得します。まだ NSSet を使用しているため、これが機能するかどうかはわかりません。
  • データを取得して NSArray を生成した後、並べ替え記述子を使用して NSSet を並べ替え、テーブルの読み込みを開始する前にそれをプロパティに格納します。
  • 私は現在、NSArray のように動作し、並べ替えフィールドを指定して NSSet への変更を自動的に追跡できるようにする NSSet のデコレータを作成するという 3 番目のオプションを考えています。トリッキーですが、長期的には報われる可能性があります。

これらの答えはどちらもそれほど素晴らしいようには見えません。これを行うより良い方法はありますか?

4

2 に答える 2

1

オブジェクトだけが必要な場合は、NSSetアクセサーを使用してください。

オブジェクトをソートする場合は、NSFetchRequestを設定し、適切なNSSortDescriptorsを追加します。

次に、次のコマンドでフェッチを実行するだけです。executeFetchRequest:error:

さらに良いことに、これは特にtableView用であるため、NSFetchedResultsControllerを使用してテーブルビューにデータを入力します。それがその目的です。

于 2011-02-27T18:37:55.523 に答える
0

NSArray がコントローラに格納され、NSSet レコードがそれにソートされることになりました。

于 2011-02-11T01:25:01.403 に答える