gpt4 book ai didi

objective-c - NSValueTransformer 没有被调用

转载 作者:行者123 更新时间:2023-12-03 17:16:01 33 4
gpt4 key购买 nike

我的共享用户默认 plist 看起来像这样:

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,其内容数组绑定(bind)到共享用户默认 Controller , Controller 键 =“values”,模型键路径 =“menuItems”。我启用了“将内容作为复合值处理”。它的对象 Controller 模式是“Class”,它控制的类名是NSMutableDictionary。

期望的结果是将 NSMenuItems“隐藏”属性绑定(bind)到 plist 中的“显示”条目。不过,您会注意到,“隐藏”和“显示”是相反的,因此我创建了一个 NSValueTransformer,它的作用很简单:

return [NSNumber numberWithBool:!value];

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

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

绑定(bind)似乎在一定程度上发挥了作用;菜单项最初显示或隐藏,但从未使用 valueTransformer,因此每个菜单项的“隐藏性”是向后的。 (顺便说一句,如果 plist 发生变化,菜单项“隐藏性”也不会自动更新,正如我对绑定(bind)所期望的那样。)

我错过了什么?

顺便说一句,我意识到在 plist 中存储“隐藏”而不是“显示”会更容易,但此时我想了解为什么这不起作用。

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

最佳答案

我刚刚结束使用 NSNegateBooleanTransformerName (我今天发现的东西)。我假设我的值转换器中有一些愚蠢的东西,或者它与尝试绑定(bind)到 NSMutableDictionary 作为我创建的示例项目有关,该项目没有使用字典工作正常。

编辑:这是我的变压器中的一些东西,因为 NSNegateBooleanTransformer 工作正常,即使混合了字典也是如此。 (无论如何,那里的冲突是没有意义的)。

我希望有人解释为什么基于上面代码的值转换器(应该与 NSNegateBooleanTransformer 相同)不起作用,并且我会更改我的答案接受。

关于objective-c - NSValueTransformer 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531281/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com