gpt4 book ai didi

objective-c - 当 NSTextField 的格式化程序更改格式时如何刷新?

转载 作者:行者123 更新时间:2023-12-03 16:41:27 25 4
gpt4 key购买 nike

我有几个 NSTextFields,它们使用绑定(bind)来获取它们的值。每个文本字段都附加了一个自定义 NSFormatter,用于格式化值。

现在我想更改此 NSFormatter 的格式,我通过在 NSUserDefaults 中设置一个键来完成此操作。格式化程序监听 NSUserDefaultsDidChangeNotification。只要支持绑定(bind)的值发生更改,此操作就有效。如果该值未更改,则 NSTextField 不会更新。

如果 NSTextField 的格式化程序更改了格式,刷新 NSTextField 的正确方法是什么?

在最好的情况下,我既不需要引用 NSTextField 也不需要引用 NSFormatter。整个应用程序中有各种温度标签,它们都应该切换其格式。我希望能够从 NSFormatter 内部启动“绑定(bind)刷新”。也许我缺少 NSNotification?

我尝试发送 willChangeValueForKey:didChangeValueForKey: KVO 通知,但这不起作用。
现在我使用的是一种相当hacky的方法,我只是稍微改变了这个值。

- (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"];
}

正如你所想象的,这两种方式都不是一个好主意。它现在可以工作,因为我只是显示该值。但我会阻止 future 使用 KVO 来处理依赖数据完整性的事情,例如温度历史记录,所以我想避免发送假值变化事件。

最佳答案

你尝试过吗:

self.selectedDevice.temperature = self.selectedDevice.temperature;

这可能是一个什么与这里绑定(bind)的问题。您的 NSTextField 是否受 selectedDevice.Temperature 的键路径绑定(bind)?也许您需要使用 @"selectedDevice.Temperature" 作为关键参数。

我在使用 willChangeValueForKey:didChangeValueForKey: 时从来没有遇到过问题,我想也许问题是你应该使用 @"_Temperature" > 代替 @"temperature" 的键。

话又说回来,我从未尝试过在 self 之外的对象上调用这些方法。您是否尝试过在 selectedDevice 内实现更新方法来执行 KVO 通知?我不知道为什么它会产生影响,但刷新值从来没有遇到过问题

关于objective-c - 当 NSTextField 的格式化程序更改格式时如何刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800278/

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