在Nib之间共享NSArrayController

时间:2013-10-01 18:27:37

标签: cocoa core-data cocoa-bindings nsarraycontroller

我有一个基于核心数据的类似iTunes的应用程序我正在构建,在主窗口中有一个NSTableView,允许用户在表格视图中选择项目并执行“获取信息”,如在iTunes中目前我正在处理单项获取信息窗口,当用户在主窗口(位于MainMenu.xib中)选择单个项目并按下Cmd-I时,该窗口会显示。这将打开单项获取信息窗口(在SingleItemGetInfo.xib中)。

主窗口中的表格视图通过绑定到NSArrayController来填充。如果我将NSArrayController放入SingleItemGetInfo.xib文件,我了解这将是NSArrayController的另一个实例。

那么,将单项获取信息窗口中的字段绑定到用户在主窗口的表视图中所做的选择的正确方法是什么?

MainMenu.xib's Array Controller bindings:
Managed Object Context: AppDelegate.self.managedObjectContext

MainMenu.xib's Table View bindings:
Content: Array Controller.arrangedObjects
Selection Indexes: Array Controller.selectionIndexes
Sort Descriptors: Array Controller.sortDescriptors

1 个答案:

答案 0 :(得分:1)

这主要与主视图和详细视图在同一窗口中时的工作方式相同。主要区别在于您需要将详细信息xib中的数组控制器的selection绑定到主数组控制器的选择。

这取决于您如何组织应用程序以完成此操作。如果两个视图都由同一个对象运行,那么您可以将主阵列控制器设置为连接到控制器的插座(@property IBOutlet NSArrayController *masterArrayController;)。然后在详细的xib中,您可以将详细数组控制器的选择绑定到主数组控制器的选择。

如果每个视图都有自己的控制器,您也可以考虑将托管对象从主视图传递到详细视图。然后,您可以绑定到xib文件中托管对象的每个属性(即绑定到File的所有者self.detailObject.fullName)。如果您传递引用,我认为所有更改都将返回到托管对象上下文。