【问题标题】:How is a NSPopUpButton filled with data when using Core Data and Bindings?使用 Core Data 和 Bindings 时 NSPopUpButton 是如何填充数据的?
【发布时间】:2012-01-05 23:48:19
【问题描述】:

我试图弄清楚在使用核心数据和可可绑定时NSPopUpButton 是如何填充数据的。原因是我继承了NSPopUpButton 并且我想通过向它们添加图像来操作菜单项的插入。

我子类化了 - (void)addItemWithTitle:(NSString *)title, - (void)addItemsWithTitles:(NSArray *)itemTitles- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index 只是为了查看调用了哪个方法,但它们都不是在应用程序启动时。

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

提前致谢, 托马斯

【问题讨论】:

    标签: xcode cocoa core-data cocoa-bindings


    【解决方案1】:

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

    假设你有一个带有 NSString 属性“name”的 CoreData 实体“Person”

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

    现在在您的界面中添加一个新的 NSPopUpBotton,并将其“内容值”绑定到 ArrayController。 Controller Key 应该是“arrangedObjects”,Model Key Path 应该是“name”。

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

    一个 NSPopUpButton 包含 NSMenuItems。 NSMenuItems 可以有一个图像。所以你不必继承它。

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

    【讨论】:

    • 你好丹尼尔!谢谢,但这不是我要找的。到目前为止,我了解绑定和核心数据,因此我能够绑定控件。我想知道NSPopUpButtonwhich 方法在由核心数据/绑定填充数据时被调用,以便我可以根据需要更改实现。
    • 丹尼尔你好。到你帖子的第二部分。我有一个带有名称和位图的核心数据实体。有效的是,名称绑定到NSPopUpButton- 我想要实现的是显示位图和名称。我没有找到仅使用 Interface Builder 获得它的方法。计划是,将实体中的名称绑定保持原样,并将NSPopUpButton 子类化,以便在向控件提供数据时以编程方式添加图像。我希望现在更清楚了。
    【解决方案2】:

    这是一个相当古老的问题,但在手动实现 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:...)
    

    当key路径的值改变方法时

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

    NSPopUpButton 上调用。此方法的实现要么更新要么创建一个全新的NSMenu 实例并将其分配给menu 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-05
      • 2011-04-15
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多