首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSMenuItem中显示模型数据

在NSMenuItem中显示模型数据
EN

Stack Overflow用户
提问于 2012-12-05 21:26:20
回答 2查看 169关注 0票数 2

我想在状态栏菜单中显示我的模型的一些数据。因此,我将实体对象绑定到NSMenuItem的标题:

代码语言:javascript
复制
        [self.statusMenu setAutoenablesItems:NO];

        NSMenuItem * exportMenuItem = [[NSMenuItem alloc] init];
        [exportMenuItem bind:@"title" toObject:expo withKeyPath:@"menuItemTitle" options:nil];
        [exportMenuItem setEnabled:NO];

        [self.statusMenu insertItem:exportMenuItem atIndex:3];

到目前为止,它在init中运行得很好。但是当我更新我的模型时,它不会更新NSMenuItem的标题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-08 21:39:22

作为参考,此问题的规范解决方案是实现如下所示的类方法:

代码语言:javascript
复制
+ (NSSet *)keyPathsForValuesAffectingMenuItemTitle
{
    return [NSSet setWithObjects: @"propertyMenuItemTitleDependsOn1", 
                                  @"propertyMenuItemTitleDependsOn2",
                                  nil];
}

如果您实现了这样的方法,那么框架将在任何其他属性发生更改时处理键menuItemTitlewillChangeValueForKey:didChangeValueForKey:调用。

票数 0
EN

Stack Overflow用户

发布于 2012-12-07 17:49:18

好的,我明白了:

menuItemTitle是一种结合了expo的两个实际属性的动态getter方法。因此,NSMenuItem的标题没有更新的原因可能是,menuItemTitle可能从未真正设置过。

那么,当我的一个属性被设置时,我如何判断menuItemTitle是否被更改了呢?覆盖expo的设置器来添加[self willChangeValueForKey:@"menuItemTitle"];[self didChangeValueForKey:@"menuItemTitle"];是行不通的,因为它会导致一个无限的循环,一次又一次地调用设置器本身。

下面是我的解决方案:我重写了[NSManagedObject setValue:(id)value forKey:(NSString *)key]

代码语言:javascript
复制
- (void)setValue:(id)value forKey:(NSString *)key {
    [self willChangeValueForKey:@"menuItemTitle"];
    [super setValue:value forKey:key];
    [self didChangeValueForKey:@"menuItemTitle"];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13724306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档