gpt4 book ai didi

objective-c - Cocoa 绑定(bind)不从用户默认值中读取 nil 值

转载 作者:行者123 更新时间:2023-12-03 17:20:31 25 4
gpt4 key购买 nike

我有两个 UI 组件,其值通过用户默认值同步。第一个本质上是输入字段,另一个是菜单项。当输入字段的值发生变化时,菜单项的等效键通过 Cocoa 绑定(bind)发生变化:

Input Field -> NSUserDefaultsController -> User Defaults
User Defaults -> NSUserDefaultsController -> Menu Item

这对于除 nil 值之外的所有内容都适用。由于某种原因,我无法在用户默认值中存储实际的 nil 值,而是使用空字典。在读取值的另一端,我有一个转换器,可以将空字典“膨胀”为 nil 值。

现在,当我在输入字段中输入非零值时,它会传递到用户默认值,并一直正确传播到菜单项。当我输入“空”值时,空字典会正确存储在用户默认值中,但菜单项的绑定(bind)值不会更改。

我做错了什么?

最佳答案

我做错的是将菜单项上的绑定(bind)实现为 hack。我通过类别引入了 keyCombo 属性:

@interface NSMenuItem (Combo)
@property(assign, nonatomic) MASShortcut *keyCombo;
@end

这是绑定(bind)到用户默认值的属性。然后,由于我无法轻松地在类别中添加实例变量,因此我只是在 getter 中返回 nil:

@implementation NSMenuItem (Combo)

- (MASShortcut*) keyCombo
{
return nil;
}

/* setter omitted */

@end

这种方法运行良好,直到我想通过绑定(bind)将属性设置为nil。因为 getter 总是返回 nil,所以 Cocoa 绑定(bind)机制认为不需要更新属性值,因为它似乎已经是 nil 了。

关于objective-c - Cocoa 绑定(bind)不从用户默认值中读取 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30703665/

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