如何以编程方式刷新NSPopupButton的菜单?

时间:2012-09-18 13:24:39

标签: objective-c cocoa nspopupbutton

这是一个由多个视图组成的核心数据应用程序,每个视图都包含在自己的Xib中。在整个应用程序中,我有几个NSPopupButton显示来自各种Core Data实体的数据,绑定在接口构建器中以传统方式完成,并且一切正常。

除了两个弹出按钮,我必须以编程方式填充而不是绑定,因为数据在弹出窗口显示之前需要一些处理。一个涉及我需要使用@distinctUNionOfObjects的实体。另一个涉及一个十进制数字的实体,需要进行自定义数字格式化,以便显示为百分比(百分号)。

为了填充这两个弹出窗口,我在awakeFromNib中为相关视图生成了数据数组。这是代码:

- (id)init {
    self = [super initWithNibName:@"xib_name" bundle:nil];
    if (!self) {
        return nil;
    }
    [self setTitle:@"view_title"];
    return self;
}

- (void)awakeFromNib {
    // fetch request on entity
    // data treatment and creation of an array with the result
    [popupButton addItemsWithTitles:array];
}

很好,但是当我向这些实体添加数据时(通过应用程序的其他视图上的表格或文本字段),然后使用弹出窗口返回视图,按钮不会使用新内容进行更新。我理解,这是因为内容是在awakeFromNib中创建的,并且再次显示相关视图不会重新唤醒Nib。但是,当源实体被修改或接收新数据时,如何使这些弹出按钮自动更新?只有在重新启动应用程序后才能看到更改。

或者我可能错过了一些东西,并且首先可以通过界面构建​​器中的绑定来完成所有这些操作吗?

感谢您的建议。

===编辑以指定[controller rearrangeObjects]无效。

0 个答案:

没有答案