首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用NSValueTransformer

未调用NSValueTransformer
EN

Stack Overflow用户
提问于 2011-06-30 15:20:39
回答 1查看 962关注 0票数 1

我有我的共享用户默认plist,如下所示:

代码语言:javascript
复制
menuItems (Array)
  Item 0 (Dictionary)
    name (String) "Menu Item 0"
    show (Boolean) NO
  Item 1 (Dictionary)
    name (String) "Menu Item 1"
    show (Boolean) YES

诸若此类。

我有一个NSArrayController,它将其内容数组绑定到共享用户默认控制器,其中controller Key = "values“,Model Key Path = "menuItems”。我启用了“将内容作为复合值处理”。它的对象控制器模式是“类”,它控制的类名是NSMutableDictionary。

期望的结果是将NSMenuItems的“隐藏”属性绑定到plist中的"show“条目。你会注意到,“隐藏”和“显示”是对立的,所以我创建了一个简单的NSValueTransformer:

代码语言:javascript
复制
return [NSNumber numberWithBool:!value];

我按如下方式设置绑定,其中“NSMenuItem”是一个项目,"valueTransformer“是如上所述的已分配和初始化的转换器,paneNum是索引,可以在其中为相应的菜单项找到适当的字典:

代码语言:javascript
复制
NSDictionary *bindingOptions = [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithBool:YES], NSContinuouslyUpdatesValueBindingOption,
        valueTransformer, NSValueTransformerBindingOption,
        nil];
    [item bind:@"hidden"
      toObject:[[defaultsController arrangedObjects] objectAtIndex:paneNum]
   withKeyPath:@"show"
       options:bindingOptions];

绑定似乎在一定程度上起作用;菜单项最初是显示或隐藏的,但valueTransformer从未使用过,因此每个菜单项的“隐藏”都是反向的。(顺便说一句,如果plist发生变化,菜单项"hiddenness“也不会自动更新,就像我期望的绑定一样。)

我错过了什么?

顺便说一句,我意识到在plist中存储“隐藏”比“显示”要容易得多,但在这一点上,我想知道为什么这不起作用。

编辑:我的猜测是,这与我试图绑定到NSMutableDictionary中的对象有关。如果是这样的话,正确的方法是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 13:18:45

我只是最终使用了NSNegateBooleanTransformerName (我今天找到的东西)。我将假设我的值转换器中有一些愚蠢的东西,或者它与试图绑定到NSMutableDictionary有关,这是我快速创建的一个不使用字典的示例项目。

编辑:这是我的转换器中的一些东西,因为NSNegateBooleanTransformer工作得很好,即使有字典在混合中也是如此。(无论如何,那里的冲突是没有意义的)。

我希望有人能解释为什么基于上面代码的值转换器(应该与NSNegateBooleanTransformer相同)不能工作,我会改变我的回答接受。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6531281

复制
相关文章

相似问题

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