2

我有一个具有属性数量的核心数据实体,即 NSDecimalNumber. 对于这个属性,实体的类有一个用NSDecimalNumberas 参数定义的方法。

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

现在,当我尝试输入数字时,出现以下错误:

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

显然,我的 setter 方法正在接收常规NSNumber而不是NSDecimalNumber. 我能否以不同的方式配置我的格式化程序,可能是在代码中而不是 IB 中,或者是添加带有NSNumberas 参数的额外设置器的唯一选项?

4

2 回答 2

2

Core Data 不存储NSDecimalNumber,仅存储NSNumber. NSNumber没有被调用的方法。

您要么需要更改要使用的实体定义,NSNumber要么自己构建NSValueTransformer以将其存储NSDecimalNumber在 Core Data 中。

请在此处查看有关属性的更多详细信息:http: //developer.apple.com/library/ios/ipad/#documentation/Cocoa/Conceptual/CoreData/Articles/cdMOM.html%23//apple_ref/doc/uid/TP40002328 -SW1

于 2011-03-06T08:58:38.283 回答
1

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

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

To make the data store give you NSDecimalNumbers, make sure the relevant attribute in the model is set to "decimal number".

于 2011-03-06T11:38:17.940 回答