如何在格式化程序更改其格式时刷新NSTextField?
我有几个NSTextFields使用绑定来获取它们的值。 每个文本字段都有一个用于格式化值的自定义NSFormatter。
现在我想改变这个NSFormatter的格式,我通过在NSUserDefaults中设置一个键来做到这一点。 格式化程序侦听NSUserDefaultsDidChangeNotification。 只要支持绑定的值发生更改,就会生效。 如果该值未更改,则NSTextField不会更新。
如果格式化程序更改了格式,刷新NSTextField的正确方法是什么?
在最好的情况下,我不需要引用NSTextField和NSFormatter。 在整个应用程序中,有各种温度标签都应该切换其格式。 我希望能够从NSFormatter内部启动“绑定刷新”。 也许我错过了NSNotification?
  我试图发送willChangeValueForKey:和didChangeValueForKey: KVO通知,但那不起作用。 
  现在我正在使用一种相当古怪的方式,我只是稍微改变一下这个值。 
- (IBAction)temperatureMenuDidSelect:(NSMenuItem *)sender {
    [[NSUserDefaults standardUserDefaults] setInteger:sender.tag forKey:MBUserDefaultsTemperatureSystemKey];
    // refresh. this is an ugly hack, maybe there is a nicer way?
    self.selectedDevice.temperature += 0.000001;
//    [self.selectedDevice willChangeValueForKey:@"temperature"];
//    [self.selectedDevice didChangeValueForKey:@"temperature"];
}
你可以想象这两种方式都不是一个好主意。 它现在工作,因为我只是显示的价值。 但是我阻止未来选择使用KVO处理依赖数据完整性的事情,例如温度历史记录,所以我想避免发送虚假的价值变化事件。
你有没有尝试过:
self.selectedDevice.temperature = self.selectedDevice.temperature;
  这可能是一个什么与这里绑定的问题。  您的NSTextField是否被selectedDevice.temperature的关键路径所约束?  也许你需要使用@"selectedDevice.temperature"作为关键参数。 
  我从来没有遇到过使用willChangeValueForKey:的问题willChangeValueForKey:后面跟着didChangeValueForKey:我想也许问题是你应该使用@"_temperature"作为键而不是@"temperature" 。 
  然后,我再也没有尝试在self以外的对象上调用这些方法。  您是否尝试过在selectedDevice内部实施更新方法来执行KVO通知?  我不知道为什么它会有所作为,但我从来没有问题刷新价值 
在你的xib内部检查员只是检查选项立即验证并不断更新。
链接地址: http://www.djcxy.com/p/85249.html上一篇: How to refresh NSTextField when its formatter changes its format?
