0

多くの従業員の例のように、エントリを含むこのコアデータに裏打ちされたデータベースがあります。従業員は部門に属することができます。部門には多くの従業員がいます。私はすべての従業員を含むNSTableView(NSArrayControllerに支えられています)を持っています。選択した従業員の可能な部門を表示するNSCollectionView(selection.possibleDepartmentsに設定されたNSArrayControllerによってサポートされています)があります。

*DDEmployee               
 name
 image
 -----
 possibleDepartments <<------ 
 selectedDepartment <<--     |
                        |    |
*DDDepartment           |    |
 name                   |    |
 -----                  |    |
 employees          <---     |
 possibleEmployees <<--------

従業員が現在所属している部門を強調したい

簡単でしょ?

現在選択されている部門を知るにはどうすればよいですか?「-(BOOL)isThisTheSelectedDepartment」を持つ部門クラス(DDDepartment)のカテゴリを作成しました。この関数では、アプリデリゲートを呼び出して、メインアレイコントローラーを提供します。メインアレイコントローラーは私に選択された従業員を与えます。選ばれた従業員に、これが彼の部署かどうか尋ねます。画像はほとんどなく、その非表示のプロパティは、presentedObject.isThisTheSelectedDepartmentにバインドされ、否定されます。これはNSCollectionViewを更新しません(明らかに:P)バインディングでこれを行う方法はありますか?

ありがとう

4

1 に答える 1

0

バインディングを使用してそれを実行したい場合は、NSObjectControllerをnibに追加できます。次に、オブジェクトコントローラで、そのコンテンツをキーパス@"selectedDepartment"を使用してemployeearraycontrollerの選択にバインドします。そのオブジェクトコントローラーには、常に選択した従業員の部門が含まれます。

DDDepartmentの場合、BOOL"isSelected"プロパティを追加します。

NSObjectControllerのサブクラスを作成します。パート1で作成したNSObjectControllerを、そのクラスのサブクラスを持つように設定します。サブクラスのオーバーライドで-(void)setContent:(id)content to be:

- (void)setContent:(id)content
{
   [[self content] setIsSelected:NO];  // clear the flag on the current selection
   [content setIsSelected:YES];  // set the flag on the new selection

   [super setContent:content];
}

最後に、隠しバインディングを変更して、isThisTheSelectedDepartmentメソッドではなくisSelectedプロパティにバインドします。これにより、すべてが処理され、従業員を選択したり、従業員の部門を変更したりするたびに、部門の選択が変更されます。

于 2011-04-15T21:59:41.873 に答える