问题
我有一个绑定到NSPopUpButton
的弹出按钮(NSArrayController
)。此数组控制器处理父对象,每个父对象都有一个子对象集合。我有一个NSTableView
,我需要在弹出窗口中显示这些孩子的所选项目。此外,需要操纵子项列表(添加/删除)。
我试图以多种方式实现这一目标,但总会遇到一些使解决方案复杂化的问题。实现这个的最佳方法是什么?
数据由Core Data管理,因此集合为NSSet
。我已尝试在父级中添加转换方法以返回已排序的NSArray
(以便将其与NSArrayController
绑定)但这种方法可防止KVO和阵列控制器未正确更新。
提前谢谢。
示例
澄清一下,这是一个假设的例子:
假设我有一份在其他地方维护的国家/地区列表。在弹出按钮中选择其中一个国家/地区。每个国家都有一组城市。选择国家/地区后,表格视图将由其城市填充。
答案 0 :(得分:3)
没有代理/数据源设置,有一个解决方案。
我的背景是:
CoreData
模型与父母和孩子,一个家长有多个孩子通过一个名为孩子的关系。两者都有一个属性name
。.m
和.h
)。 (如果你去File-New-File-CoreData-NSManagedObjectSubclass,Xcode会为你编写它们。)现在ParentObject.children可以访问ParentObject的ChildObjects NSArrayControllers
:ParentArrayController
和ChildArrayController
。NSTableViews
:ParentTable
和ChildTable
,每个name
都有一列。 (只要它由NSArrayController
控制,无论你使用弹出窗口还是表格都无关紧要。)采取的步骤如下:
Entity Name
及其各自的实体(父或子)ChildArrayController
绑定部分中,使用ControllerKey绑定到ParentArrayController
:selection
和ModelKeyPath:children
。完成。如果在ParentTable中选择ParentObject,则ChildTable会显示其子项。
要向父母添加和删除子项,您可以使用Xcode在(void)addChildrenObject:(Child *)value;
类文件中为您编写的Parents.m
方法。
答案 1 :(得分:0)
我没有找到任何方法通过简单的拖放来实现它。我必须为城市表实现委托和数据源(来自示例)。窗口控制器会在弹出按钮中通知选择更改,这会更新表视图委托/数据源上的内容。
我实际上觉得这是实现问题的更好方法(比绑定和数组控制器更好),因为它可以更好地控制特殊情况。