【发布时间】:2010-04-19 11:09:51
【问题描述】:
我对可可绑定的世界还很陌生,我遇到了一些麻烦(可能/可能是由于误解)。
我有一个单例,其中包含一个称为插件的 NSMutableArray,其中包含类插件的对象。它有一个名为 loadPlugins 的方法,可以将对象添加到 plugins 数组中。这可以在任何时候调用。它已作为实例添加到 Interface Builder 中。
在 IB 中还有一个 NSObjectController,它的内容出口连接到单例。还有一个NSArrayController,它的contentArray绑定到NSObjectController(controller key是'selection',model key path是'plugins',object class name是'Plugin')。
最后我有一个包含 2 列的表格视图,其值使用 Plugin 类中的属性键绑定到 NSArrayController 的排列对象。
到目前为止是标准的(至少从教程中我可以看出)。我的问题是,当在单例中调用 loadPlugins 方法并将对象添加到 plugins 数组时,表格不会更新以显示对象(除非在加载 nib 之前调用 loadPlugins)。在 tableView 上调用 -reloadData 不会做任何事情。
有没有办法告诉 NSArrayController 引用的数组已经更新?我知道有 NSArrayController 的 -add: 方法,可以在 loadPlugins 中使用,但这是不可取的,因为我想让单例与显示方面完全分开。
这似乎与: Refresh Cocoa-Binding - NSArrayController - ComboBox
这行:“在控制器背后编辑数组”似乎可以指出问题所在,但我希望单例可以不知道控制器。
提前致谢。
\编辑...
根据 TechZen 的建议,绑定如下:
TableColumn --('arrangedObjects', 'pluginName', Value)--> NSArrayController
NSArrayController --('selection', 'plugins', ContentArray)--> NSObjectController
NSObjectController --(content)--> PluginsManager
【问题讨论】:
标签: objective-c cocoa cocoa-bindings nsarraycontroller