gpt4 book ai didi

macos - NSTextField 与 NSFormatter 导致连续绑定(bind)损坏

转载 作者:行者123 更新时间:2023-12-03 16:32:02 24 4
gpt4 key购买 nike

我有一个必须是唯一的文本字段,因此我添加了自定义 NSFormatter (见下文)

格式化程序可以工作,正如您在屏幕截图中看到的那样,但是我正在使用的连续绑定(bind)已损坏,因此例如绑定(bind)文本不再实时更新。

我找到了一个可能的原因here ,但我不知道如何解决这个问题并重新启用连续绑定(bind):

...

  • 12. If the view has an NSFormatter attached to it, the value is formatted by the NSFormatter instance. Proceed to Step 17.
  • ...
  • 17. The updated value is displayed in the user interface.

So it looks like it's intentionally skipping the steps we want. This is very annoying. I tried NSValueTransformer, but adding that to an editable NSTextField makes it non-editable.

我的格式化程序

- (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string errorDescription:(out NSString **)error {

if([string isNotEqualTo:@"todo-invalid-value"]){
*obj = string;
NSLog(@"YES");
return YES;
} else {
if(error){
*error = @"ERROR: not allowed";
}
return NO;
}
}

- (NSString *)stringForObjectValue:(id)obj {
return (NSString *)obj;
}

工作验证

enter image description here

请注意,列表项的标题应使用我在文本字段中输入的文本进行更新。

最佳答案

周末我遇到了同样的问题,最终发现了post from 2008 by Yann Disser在 cocoa-dev 邮件列表上,它揭示了我的问题。

我有一个现有的 NSFormatter,它运行良好,当我分解码件时,所以今天早上我花了更多时间在它上面并找到了 Yann 的帖子。

关键是您需要返回一个与传入的对象不同的对象。这很微妙,但文档说:如果转换成功,则返回时包含从字符串创建的对象 .

我遇到的问题源于这样一个事实:传入的 NSString 实际上是一个 NSMutableString 并且稍后进行了修改。

这是修改为返回 [NSString stringWithString: string] 的代码,这应该可以解决您的问题:

- (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string errorDescription:(out NSString **)error {

if([string isNotEqualTo:@"todo-invalid-value"]){
*obj = [NSString stringWithString: string];
NSLog(@"YES");
return YES;
} else {
if(error){
*error = @"ERROR: not allowed";
}
return NO;
}
}

关于macos - NSTextField 与 NSFormatter 导致连续绑定(bind)损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377563/

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