(摘要:绑定在代码中起作用,但在 IB 中不起作用)
我有一个由 NSWindowController 管理的窗口。窗口左侧是源视图。右侧是一个表格视图,显示当前所选源的元素。
我已经在我的窗口 XIB 中设置了一个 NSTreeController。我希望它的内容用于源视图。它的选择将驱动表格视图。
我正在尝试使用 NSViewControllers 将其拆分。一个视图控制器将加载一个包含源视图的 NIB。另一个视图控制器将加载表格视图。
看到我需要访问源视图控制器中的 NSTreeController,我将其设置为视图控制器的代表对象。(实际上,要在视图控制器上调用 awakeFromNib 时完成此设置,我已将代表对象转换为 IBOutlet)。
当我在代码中连接我的源视图时,一切正常:
[outlineView bind:@"content"
toObject:sources
withKeyPath:@"arrangedObjects"
options:nil];
[outlineView bind:@"selectionIndexPaths"
toObject:sources
withKeyPath:@"selectionIndexPaths"
options:nil];
[[outlineView tableColumnWithIdentifier:@"Title"] bind:@"value"
toObject:sources
withKeyPath:@"arrangedObjects.title"
options:nil];
但是,我无法使用 Interface Builder 重现这一点。问题是,这里的“控制器键”文本字段是灰色的。因此,我使用“representedObject.arrangedObjects.title”的模型 keyPath 将列的“值”绑定到文件所有者。这没有显示所需的行为。实际上抛出了一个异常:-[NSProxy doesNotRecognizeSelector:_mutatingNodes] called!
如何在 IB 中使用代表对象?我可以在 IB 中创建一个控制器来充当代表对象的代理吗?我可以在源视图 XIB 中设置一个树控制器,在 NIB 加载期间它被替换为代表对象吗?