0

在核心数据实体中,我有一个“长度”属性。我以厘米为单位保存长度。

我想让用户可以查看和编辑以厘米或英寸为单位的长度。所以我在 NSPopUpButton 旁边放置了一个 NSTextField ,并选择了厘米和英寸。

根据 NSPopUpButton 的选择格式化 NSTextField 的最佳方法是什么?如果这个问题是合理的,我希望尽可能多地使用绑定。

我看到有

  • NSNumberFormatters 和
  • NSValueTransformers

或者我可以编写自定义代码来转换单位?

解决这个问题的最优雅的方法是什么?

4

1 回答 1

1

如果您将用户的 cm/in 选择保留为具有实体属性的每个实体选择,您可以使用值绑定和自定义值转换器在文本字段上进行反向转换,即 cm/in 选择绑定在弹出窗口上,以及实体上的 keyPathsForValuesAffectingLength 类方法。

如果属性 displayInInches——或任何你称之为的属性——被注册为影响长度值的 keyPath,则在切换弹出窗口时将调用自定义值转换器,并且文本字段将更新。

如果 cm/in 选择来自用户默认值(如果更改不是每个实例),您可以将弹出窗口绑定到用户默认值并让自定义值转换器考虑默认值,但更改该弹出窗口不会刷新文本域。所以我认为你需要一个 IBAction 来触摸实例的长度。

您可以在此之上添加一个数字格式化程序 - 特别是如果您的值转换器转换为 NSNumber 而不是 NSString - 但主要用于本地化和有效数字的数量,而不是用于 cm/in 数学。

于 2014-05-04T23:08:54.133 回答