(摘要:绑定在代码中工作,但在IB中不起作用)
我有一个由NSWindowController管理的窗口.窗口左侧是源视图.右侧是一个表格视图,显示当前所选源的元素.
我在我的窗口XIB中设置了一个NSTreeController.我希望它的内容用于源视图.它的选择将驱动表格视图.
我试图使用NSViewControllers将其拆分.一个视图控制器将加载包含源视图的NIB.另一个视图控制器将加载表视图.
看到我需要访问源视图控制器中的NSTreeController,我已将其设置为视图控制器的representObject. (实际上,为了在视图控制器上调用awakeFromNib时完成此设置,我已将representObject转换为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重现这一点.事情是,这里“控制器键”文本字段显示为灰色.因此,我使用“representObject.arrangedObjects.title”的模型keyPath将列的“值”绑定到文件所有者.这并未显示所需的行为.实际上抛出异常: – 调用[NSProxy doesNotRecognizeSelector:_mutatingNodes]!
如何在IB中使用representObject?
我可以在IB中创建一个控制器作为代表对象吗?
我可以在源视图XIB中设置一个树控制器,它在NIB加载期间被替换为代表对象吗?
最佳答案 我放弃了使用代表对象.它似乎仅适用于模型对象.
我现在使用自定义插座传入我的树形控制器.我继续在代码中设置和拆除绑定.