我有一个文本字段,它必须是唯一的,所以我添加了我的自定义NSFormatter (见下面)
格式化程序可以工作,正如您在屏幕截图上看到的那样,但是我使用的连续绑定已经中断,因此绑定的文本不再实时更新。
我找到了一个可能导致这里的原因,但我不知道如何解决这个问题并重新启用连续绑定:
..。
所以看起来它是故意跳过我们想要的步骤。这太烦人了。我尝试了NSValueTransformer,但是将它添加到可编辑的NSTextField中使其不可编辑。
我的格式化程序
- (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;
}工作验证

请注意,列表项目的标题应该用文本更新,这是我在textfield中输入的。
发布于 2014-04-21 11:38:23
在周末,我遇到了同样的问题,最终在cocoa邮件列表上发现了一个亚恩·迪塞尔自2008年起任职,这说明了我的问题。
我有一个现有的NSFormatter,运行良好,当我分解组件时,我今天早上花了更多的时间在它上,找到了Yann的帖子。
关键是您需要返回一个与传入的对象不同的对象。这很微妙,但是文档说:如果转换成功,返回时就包含从string创建的对象。
我所遇到的问题来自于这样一个事实:即将进入的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;
}
}https://stackoverflow.com/questions/19377563
复制相似问题