コアデータのモデルファイルに2つのエンティティがあります.1つはすべてX社が行った「トランザクション」です。 「トランザクション」エンティティには、「DATE」プロパティと「COMPANY」という1対1の関係(X社がその特定の取引を行った会社を指定する)があります。他のエンティティ:「企業」にはもちろん、X社が取引を行ったすべての企業の情報が含まれています。 「企業」エンティティは、「トランザクション」エンティティの「COMPANY」関係と逆の関係である「トランザクション」という多対多の関係を持っています。NSTableViewの選択を他のテーブルビューの選択にバインドすることは可能ですか?
したがって、IBの中で、特定の日付(NSPredicate
の助けを借りて)のすべての取引を示すNSTableView
(それ自体はNSArrayController
)を作成しました。
次に、最初のテーブルビュー(特定の日付のトランザクションを表示)に、選択したトランザクションの会社の多対多関係「取引」を示す別のテーブルビューを作成します。
**バインド先: "最初のtableviewのコントローラの名前"、コントローラキー:選択、モデルキーパス:COMPANY.TRANSACTIONS( "企業内の多対多の関係"エンティティ)**
第2テーブルビューは、X社が第1テーブルビューで選択した取引の会社と行ったすべてのトランザクションを示しています。
しかし、特定のトランザクションの詳細を示す一連のテキストフィールドがあります。これらのテキストフィールドを第1テーブルビューのコントローラ(特定の日付のトランザクションを表示するコントローラ)にバインドするのはかなり簡単です。 1 /最初のテーブルビューで特定の日付のトランザクションを検索し、いずれか1つを選択します 2 /次に、そのトランザクションの会社の以前のすべてのトランザクションをチェックします(最初のテーブルビューから) 3 /前のトランザクションを選択し、そのテキストフィールドのグループからトランザクションの詳細を確認
当然、私はテキストフィールドのgpを2番目のテーブルビューのコントローラにバインドする必要があります。しかし、2番目のテーブルビュー(会社の以前のすべてのトランザクションを表示)のデフォルトの選択行が、特定の日付の1番目のtableViewで選択したトランザクションではないことがわかりました。もちろん、2番目のテーブルビューでそのトランザクションを手動で選択することもできます....
2番目のテーブルビューで、選択したトランザクションに従ってトランザクションを自動的に選択できるかどうかを知りたい最初のテーブルビューでのバインディング??グーグルの時間後
は、私はテーブルビューのデリゲートプロトコルを実装することで、問題を解決:
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification {
if (["nameOf1stTableView" selectedRow] > -1) {
NSArray *objsArray = ["nameOf2ndTableView'sController" arrangedObjects];
for (id obj in objsArray) {
if ([[obj valueForKey:@"DATE"] isEqualToDate: ["nameOf1stTableView'sController".selection valueForKey:@"DATE"]]) {
["nameOf2ndTableView" selectRowIndexes:[NSIndexSet indexSetWithIndex:[objsArray indexOfObject:obj]] byExtendingSelection:NO];
}
}
}
}
をしかし、これはあまりにも面倒見て...それは結合のみで行うことができますか?あなたがTransaction
のインスタンスがテーブルビュー#1で選択されている場合、テーブルビュー#2に表示するもの -