1

NSTableViewの行に1対多または多対多の関係を示すためにココアバインディングを使用することが可能です。NSTableViewと多対多の関係でココアバインディングを使用することは可能ですか?

私がしようとしているのは、行ごとに1つのエンティティを表示し、1つの列に別のエンティティからの複数の属性を示すことです。現在、私のスキーマは、このようなものである

人< --- >>タグ

1行は次のようになります。

Name | Birth | Address | tag 
-------------------------------------------------------- 
jon 75/12/13 123 street handyman, contractor 
paul 53/03/20 53 avenue 1 contractor, swimmer, biologist 

でも可能ということでしょうか?

答えて

3

これを行うにはいくつかの方法があります。議論のために、1対多の関係のコレクション・プロパティーtagsと仮定します。これは一種であるので

+ (NSSet*)keyPathsForValuesAffectingTagList 
{ 
    return [NSSet setWithObject:@"tags"]; 
} 
- (NSString*) tagList 
{ 
    return [[self.tags sortedArrayUsingSelector:@selector(localizedStandardCompare:)] componentsJoinedByString:@", "]; 
} 

tagsは配列ではなく、設定されている場合は、self.tags.allObjectsを使用すると思います。)

あなたはタグリストの文字列である依存プロパティを作ることができますタグリストがビュー内にどのように表示されるかに特有のものであり、モデルレイヤよりもビューレイヤのより多くの部分とみなすことができる。したがって、クラス自体ではなく、クラスのカテゴリでこれらのメソッドを定義することができます。

別のアプローチは、値トランスフォーマクラスを使用して同じことを行うことです。テキストフィールドをtagsコレクションプロパティにバインドしますが、カスタムバリュートランスフォーマクラスの名前を指定します。そのクラスは、コレクションクラス(配列またはセット)から変換し、上記と同様の方法で文字列を生成します。

+0

注:タグ名が変更されると、タグリストは自動的にリフレッシュされません。 – Willeke

+0

@Willeke、その意味では?タグリストは、要求されるたびに再作成されます。 '+ keyPathsForValuesAffectingTagList'メソッドは、KVOに準拠した方法で' tags'が変更されるたびに 'tagList'に対して変更通知を出す必要があることをKVOが知っていることを保証します。値トランスフォーマでは、バインディングは 'tags'を直接観察しています。変更されると、バインドされたビューはそれ自身を更新し、トランスフォーマーを使用してタグリストを取得します。 –

+0

申し訳ありませんが、私は1つのステップが遠すぎると考えています。 tagsが文字列の配列であれば動作します。私はあまりにも多くのコアデータをやったと思う。 – Willeke

関連する問題