在IB中显示NSDecimalNumber作为货币

时间:2011-03-06 03:04:07

标签: objective-c cocoa interface-builder nsnumberformatter nsdecimalnumber

我有一个核心数据实体,其属性数量为NSDecimalNumber。对于此属性,实体的类具有使用NSDecimalNumber作为参数定义的方法。

在Interface Builder中,我将一个表列绑定到此属性(使用NSArrayController),并在列的单元格中放置NSNumberFormatter。格式化程序在IB中配置为“货币”。

现在,当我尝试输入一个数字时,我收到以下错误:

-[NSCFNumber decimalNumberBySubtracting:]: unrecognized selector sent to instance 0x1001d5590

显然,我的setter方法正在接收常规NSNumber而不是NSDecimalNumber。我可以用不同的方式配置我的格式化程序,可能是在代码而不是IB中,或者是添加另一个以NSNumber作为参数的setter的唯一选项吗?

2 个答案:

答案 0 :(得分:2)

核心数据不存储NSDecimalNumber,仅存储NSNumberNSNumber没有被调用的方法。

您需要更改实体定义以使用NSNumber或构建您自己的NSValueTransformer以将NSDecimalNumber存储在核心数据中。

请点击此处了解有关属性的更多详情:http://developer.apple.com/library/ios/ipad/#documentation/Cocoa/Conceptual/CoreData/Articles/cdMOM.html%23//apple_ref/doc/uid/TP40002328-SW1

答案 1 :(得分:1)

我不清楚你的问题究竟在哪里。格式化程序给你一个直的NSNumber而不是NSDecimalNumber或者核心数据。

要使NSNumberFormatter为您提供NSDecimalNumbers,请使用方法-setGeneratesDecimalNumbers:

要使数据存储为您提供NSDecimalNumbers,请确保模型中的相关属性设置为“十进制数”。