【发布时间】:2010-03-03 01:33:28
【问题描述】:
我在思考如何在两个视图控制器之间连接几个 NSArrayController 时遇到了问题。我想同步源列表视图中的选择以更新第二个详细视图控制器中的值。
我使用Cocoa Dev Central Build A Core Data Tutorial 作为起点,但是已经分解了架构,因此有一个包含两个 NSViewController 的 NSWindowController:一个用于左侧的帖子表,一个用于右侧的帖子详细信息.
NSWindowController 子类有一个绑定到 Post 实体的 NSArrayController 和一个指向 [[NSApp delegate] managedObjectContext] 的只读 managedObjectContext 访问器
然后我在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 有一个 NSArrayController 绑定到 Post 实体,它的托管对象上下文绑定到父窗口控制器的托管对象上下文(全部通过 Interface Builder)
MDVCPostDetailViewController 有一个 NSObjectController 绑定到窗口控制器的托管对象上下文,内容对象通过postsListsViewController.postsArrayController.selection 绑定到窗口控制器。这似乎是一个非常糟糕的 hack。
我怎样才能得到它,以便更改MDVCPostsListViewController 的表格视图中的选择将更新MDVCPostDetailViewController 中的选定值?我觉得我很接近了,但不确定缺少什么或最好的路线是什么。我确实觉得postsListsViewController.postsArrayController.selection 绑定非常hacky。希望有更好的方法。
我已经上传了我的示例项目,它为那些喜欢查看代码而不仅仅是阅读描述的人展示了这一点。你可以从我的网站http://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zip获取它
【问题讨论】:
标签: core-data binding nsarraycontroller nsviewcontroller nsobjectcontroller