Core Data アプリのテーブル選択とテーブル行をプログラムで取得するにはどうすればよいですか?
-
20-09-2019 - |
質問
TableView で 1 人の「プレイヤー」を選択すると、すべてのチームメイトのリストが 2 番目の TableView に表示され、その 2 人のプレイヤーが同じゲームでプレーした回数の列が表示される Core Data アプリを作成しようとしています。 「チーム」(別の実体)。
これで私は完全に行き詰まってしまいました。通常の配列からテーブルを埋める方法は知っていますが、ArrayController と Core Data を使用すると、状況の見方が非常に雑然としてしまうからです。
これについてはどのようにアプローチしますか?
解決
あなたの問題はバインディングの問題であり、コアデータの問題ではありません。:-)
必ず把握する必要があります ココアバインディング Core Dataを扱う前に。これはドキュメントに記載されており、非常に真実です。
ご質問の内容と本体が違うようなので、両方お答えします。
チームメイトを見せる
コア データはさておき、プレーヤー インスタンスを表すテーブルがあると仮定します。プレイヤーは 1 つのチームを持っています。チームには多くの選手がいます。したがって、Player のインスタンスには、チームメイトとして "team.players" (それ自体を除く) が含まれていると推測されます。Core Data を使用してモデルを管理しているかどうかに関係なく、これは全体的な関係に当てはまります。
Cocoa バインディングを読んでマスターすれば、基本的なツールを使用してこれをセットアップするのはまったく難しいことではないことがわかるでしょう。 マスター/詳細 セットアップ (簡単にするために詳細部分に追加の配列コントローラーを使用)。マスター配列コントローラーはすべてのプレーヤー インスタンスを表し、詳細配列コントローラーはチームメイト、またはマスターの選択の「team.players」(それ自体を除く) を表します。
Teammates アレイ コントローラーには、そのエンティティと管理対象オブジェクト コンテキストが通常どおり設定されます (ドキュメントを参照)。「contentSet」は、モデル キー パスとして「team.players」を使用して、マスター アレイ コントローラーの「選択」コントローラー キーにバインドされます。
秘訣は、マスター コントローラーの選択したプレーヤーを次の方法で除外することです。 述語. 。これはアレイコントローラーを使用して行うことができます フィルター述語. 。おそらく、「self != %@」という形式のものが考えられます。「%@」はマスター アレイ コントローラーの選択を表します。述語 (それ自体が複雑なトピックです) については、あなたにお任せします。これらはコード ([myController setFilterPredicate:myPredicate]) で設定するか、バインディングを使用して設定できることに注意してください。述語は 独立した コアデータも同様です。
選択範囲の取得
配列コントローラーはテーブルが表す配列を担当するため、配列コントローラーにその選択内容を問い合わせるのが最善です。1 つの方法は、-arrangedObjets に -selectedIndexes のオブジェクトを問い合わせることです。
NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]];
-selectedObjects を要求することもできます。これら 2 つのアプローチには相違点があり、ドキュメント (API リファレンスと概念ドキュメント) で説明されているため、必ず理解する必要があります。 コントローラーに尋ねることが最も重要な概念です, NSArrayController を使用するか、 および プロトコルに準拠するカスタム コントローラーを使用するかに関係なく。
免責事項: 社交的な酒の夕べの後、急いでタイプしました。エラーはチェックされていません。:-)