gpt4 book ai didi

objective-c - 绑定(bind)返回默认值(使用 registerDefaults :) instead of zero 设置

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

这是我的设置:

  • myTextField 绑定(bind)到共享用户默认 Controller 中的键。用户只能在文本字段中输入数字。
  • 每次加载应用程序时,我都会使用 [[NSUserDefaults standardUserDefaults] registerDefaults: ... ] 加载默认首选项(从应用程序的 Resources 文件夹中)。

  • myMenuItem 的标题绑定(bind)到共享用户默认 Controller 中的同一键。



问题:



myTextField 为空时,myMenuItem 接收使用 registerDefaults: 加载的默认值,而不是表示空字段的某个值(我期望 0 或 nil)。



例如,当 NSTextField 为空时,菜单项会收到“2”,即使用 registerDefaults: 加载的值,而不是某个表示字段为空。



如果我注释 registerDefaults: 代码,当 NSTextField 中没有任何内容时,绑定(bind)将返回 nil,正如我所期望的那样。 p>

我试图搞乱许多绑定(bind)的设置以及尝试占位符值,我查看了 Cocoa Bindings 和 User Defaults 文档,但找不到解决方案。



预期行为:




  • 当文本字段为空时,我希望 myMenuItem 反射(reflect)这一点,而不是使用使用 registerDefaults: 注册的默认值。



任何帮助将不胜感激。






最佳答案





我从 irc.freenode.org #macdev 的好心人那里得到了一些提示,并发现以下是我的问题的解决方案:



创建 NSFormatter 的子类(在我的例子中是 NSNumberFormatter)并重写 getObjectValue:forString:errorDescription: ,如下所示会重写返回 nil 的默认行为(这使得绑定(bind)使用注册的默认值),当文本字段为空时返回 0。



- (BOOL)getObjectValue:(id *)anObject forString:(NSString *)string errorDescription:(NSString **)error {
if ([string isEqualToString:@""]) {
*anObject = [NSNumber numberWithInt:0];
return YES;
} else {
return [super getObjectValue:anObject forString:string errorDescription:error];
}
}

NSValueTransformer 子类的反向转换方法也适用于此。

关于objective-c - 绑定(bind)返回默认值(使用 registerDefaults :) instead of zero 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824022/

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