2 つのビュー コントローラー間でいくつかの NSArrayControllers を接続する方法に頭を悩ませている問題があります。ソース リスト テーブル ビューの選択内容を同期して、2 番目の詳細ビュー コントローラーの値を更新したいと考えています。
Cocoa Dev Central Build A Core Data Tutorialを出発点として使用していますが、2 つの NSViewControllers を含む NSWindowController があるようにアーキテクチャを分解しました。1 つは左側の投稿テーブル用、もう 1 つは投稿の詳細用です。権利。
NSWindowController サブクラスには、Post エンティティにバインドされた NSArrayController と、次を指す読み取り専用の managedObjectContext アクセサーがあります。[[NSApp delegate] managedObjectContext]
次に、メソッドで 2 つのビュー コントローラーを初期化しますwindowDidLoad
。
- (void)windowDidLoad
{
static NSInteger kSourceListViewIndex = 0;
static NSInteger kDetailViewIndex = 1;
self.postsListsViewController = [[MDVCPostsListViewController alloc] initWithWindowController:self];
NSView *sourceListSplitViewContentView = [[self.splitView subviews] objectAtIndex:kSourceListViewIndex];
NSView *sourceListView = [self.postsListsViewController view];
[sourceListView setFrame:[sourceListSplitViewContentView bounds]];
[sourceListView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[sourceListSplitViewContentView addSubview:sourceListView];
// And now let's load the detail view.
self.postDetailViewController = [[MDVCPostDetailViewController alloc] initWithWindowController:self];
NSView *detailSplitViewContentView = [[self.splitView subviews] objectAtIndex:kDetailViewIndex];
NSView *detailView = [self.postDetailViewController view];
[detailView setFrame:[detailSplitViewContentView bounds]];
[detailView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[detailSplitViewContentView addSubview:detailView];
}
MDVCPostsListViewController
Post エンティティにバインドされた NSArrayController と、親ウィンドウ コントローラーの管理オブジェクト コンテキストにバインドされたその管理オブジェクト コンテキストを持ちます (すべて Interface Builder を介して)。
MDVCPostDetailViewController
には、ウィンドウ コントローラーのマネージド オブジェクト コンテキストにバインドされた NSObjectController と、 を介してウィンドウ コントローラーにバインドされたコンテンツ オブジェクトがありますpostsListsViewController.postsArrayController.selection
。これは本当に厄介なハックのようです。
MDVCPostsListViewController
のテーブル ビューで選択を変更すると、 で選択された値が更新されるようにするにはどうすればよいMDVCPostDetailViewController
ですか? 近づいたような気がしますが、何が欠けているのか、どのルートをたどるのが最善なのかわかりません。postsListsViewController.postsArrayController.selection
バインディングは非常にハッキーだと思います。うまくいけば、より良い方法があります。
説明を読むだけでなくコードを見ることを好む人のために、これを示すサンプル プロジェクトをアップロードしました。私のサイトhttp://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zipから入手できます。