使用Core Data和Bindings时,NSPopUpButton如何填充数据?

时间:2011-11-24 23:09:11

标签: xcode cocoa core-data cocoa-bindings

我正在尝试弄清楚在使用核心数据和可可绑定时NSPopUpButton如何填充数据。原因是我将NSPopUpButton子类化了,我想通过向它们添加图像来操纵菜单项的插入。

我继承了 - (void)addItemWithTitle:(NSString *)title- (void)addItemsWithTitles:(NSArray *)itemTitles- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index 只是为了看看哪个方法被调用但是没有一个方法在应用程序启动时。

有人知道什么是正确的方法。类引用文档在这里不是很有用(或者我没有得到它如何使用它),因为没有列出影响项目插入的其他方法。

提前致谢, 托马斯

2 个答案:

答案 0 :(得分:1)

这是使用CoreData中的数据填充NSPopUpButton的方法:

假设您拥有CoreData实体“Person”,其NSString属性为“name”

首先在InterfaceBuilder中创建一个NSArrayController并将其模式设置为“Entity Name”,输入名称“Person”并选中“Prepares Content”。

现在在您的界面中添加一个新的NSPopUpBotton并将其“Content Values”绑定到ArrayController。 Controller Key应该是“arrangeObjects”和Model Key Path“name”。

(现在你只需添加一些数据)

NSPopUpButton包含NSMenuItems。 NSMenuItems可以有一个图像。所以你不必将它子类化。

您还可以使用NSMenuItems创建一个数组,该数组具有图像并将数组绑定到NSPopUpButton的“内容”。

答案 1 :(得分:0)

这是一个非常古老的问题,但在手动实现NSPopUpButtonNSTreeController的绑定后,我确实得到了答案。

您可以在Github上查看我的NSTreePopUpButton项目,看看我是如何做到的,我很确定NSPopUpButton也是如此。

据我所知NSPopUpButton覆盖

func bind(binding: String, toObject observable: AnyObject, withKeyPath keyPath: String, options: [NSObject : AnyObject]?)

如果bindingNSContentBinding,则该类将自身添加为对象和关键路径的观察者,如。

observable.addObserver(self, forKeyPath: keyPath, options:..., context:...)

当键路径的值改变方法

func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>)
NSPopUpButton上调用

。此方法的实现更新或创建一个完整的新NSMenu实例,并将其分配给menu属性。