2011-12-19 7 views
1

これはシナリオです。 2つのCoreDataモデルオブジェクトAとBがあり、それらの関係はA has-many Bであり、プロパティーはsetOfBsで表されます。 2つのテーブルを表示したいと思います.1つはすべてAs(表1)、もう1つはすべてのBs(表2)をリストします。ユーザが表1の項目を選択すると、表2の選択は、表1で選択されたAのsetOfBsの値を反映するように変化する。表の内容は変化せず、選択のみが変更される。また、表1の選択が変更された場合は、それを反映するようにsetOfBsが変更されます。NSArrayControllerの選択に多対多の関係を表すNSSetをバインドします

バインディングを使用してこれを達成できますか?カスタムロジックが必要なのでしょうか?

+0

同じノートでは、典型的な多対多関係エディタはどのように見えますか? – Tony

答えて

1

私は、このアプローチを働かせるためには追加のロジックを書く必要があると思います。理由は次のとおりです。NSArrayControllers(およびそれらにバインドされているすべてのUIオブジェクト)の選択バインディングは、選択のインデックスに基づいていますが、タイプAのオブジェクトを持つ場合、B オブジェクトのセットを返します。 AsのアレイコントローラーとBsのアレイコントローラーがあると仮定すると、Bのアレイコントローラーの選択を設定するために、それらのオブジェクトからインデックスのBsの配列から取得する方法が必要です。書くのは難しいコードではありませんが、バインディングだけでこれを行うことはできません。

あなたのコメントで推測したように、これはこの関係を編集する良い方法のようには思えません。一般的なケースでは、TableViewの選択はUIの状態であり、のモデルの状態ではありません。あなたのようにUIを構築すると、UIの状態とモデルの状態は同じになります。私はそれが不可能である、または本質的に悪いと言っているわけではありませんが、実際にこの種のことを行う「標準的な」方法ではありません。一つの一般的なパターンは次のようになります。

To-many editing UI example

ない選択ですべてのBS」に結合する(ボックス外)の方法ではないように思われるためであっても、このようなアプローチは、追加のロジックが必要になりますAのsetOfBs "コードを書くことなく。繰り返しますが、書くのは難しいコードではありませんが、これはバインディングのみで行うことはできません。私は間違っている可能性がありますが、それは私の状況の読書です。