1

TableView で 1 人の「プレーヤー」を選択すると、すべてのチームメイトのリストが 2 番目の tableView に表示され、その 2 人のプレーヤーが同じプレーヤーで何回プレーしたかの列が表示される Core Data アプリを作成しようとしています。 「チーム」(別のエンティティ)。

通常の配列からテーブルを埋める方法は知っていますが、ArrayControllers と Core Data を使用すると、状況に対する私の見方が本当に乱雑になるため、これは私を完全に行き詰まらせました。

これにどのようにアプローチしますか?

4

1 に答える 1

2

あなたのものはバインディングの問題であり、コアデータの問題ではありません。:-)

Core Data を扱う前に、必ずCocoa Bindingを理解する必要があります。これはドキュメントに記載されており、非常に真実です。

ご質問の件名と本文が違うようですので、両方お答えします。

チームメイトを表示する

Core Data は別として、Player インスタンスを表すテーブルがあると仮定します。プレーヤーには 1 つのチームがあります。チームには多くのプレーヤーがいます。したがって、Player のインスタンスには、チームメイトとして「team.players」(それ自体を除く) があると推測されます。Core Data を使用してモデルを管理しているかどうかにかかわらず、これは全体的な関係に当てはまります。

Cocoa Bindings を読んでマスターすれば、基本的なマスター/ディテールセットアップを使用してセットアップするのはまったく難しくないことがわかります (簡単にするために、ディテール パーツ用の追加のアレイ コントローラーを使用します)。マスター配列コントローラーはすべての Player インスタンスを表し、詳細配列コントローラーはチームメイトまたはマスターの選択の「team.players」(それ自体を除く) を表します。

Teammates アレイ コントローラーには、エンティティと管理オブジェクト コンテキストが通常どおり設定されます (ドキュメントを参照)。「contentSet」は、モデル キー パスとして「team.players」を使用して、マスター アレイ コントローラーの「selection」コントローラー キーにバインドされます。

秘訣は、 predicateを使用してマスター コントローラーの選択されたプレーヤーを除外することです。これは、アレイ コントローラのFilter Predicateで実行できます。「self != %@」の形式の場合もあります。ここで、「%@」はマスター アレイ コントローラーの選択を表します。述語 (それ自体が複雑なトピック) はあなたに任せます。これらはコード ([myController setFilterPredicate:myPredicate]) で設定するか、バインディングを使用して設定できます。述語はCore Data からも独立しています。

選択の取得

アレイ コントローラはテーブルが表すアレイを担当するため、アレイ コントローラにその選択内容を問い合わせるのが最善です。1 つの方法は、-arrangedObjets に、その -selectedIndexes にあるオブジェクトを要求することです。

NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]];

-selectedObjects を要求することもできます。ドキュメント (API リファレンスと概念に関するドキュメント) で説明されているこれら 2 つのアプローチには相違点があり、必ず理解する必要がありますが、NSArrayController を使用するか、準拠するカスタム コントローラーを使用するかに関係なく、コントローラーに問い合わせることが最も重要な概念です。および プロトコル。

免責事項: 社交酒の夕べの後、急いでタイプしました。エラーはチェックされていません。:-)

于 2010-02-14T03:00:54.757 に答える