2

我有一個核心數據實體,其中包含一個NSDecimalNumber屬性值。對於此屬性,實體的類具有使用NSDecimalNumber作爲參數定義的方法。在IB中顯示NSDecimalNumber作爲貨幣

在界面生成器中,我將一個表列綁定到此屬性(使用NSArrayController),並在列的單元格上放置了一個NSNumberFormatter。格式化程序在IB中被配置爲「貨幣」。

現在,當我嘗試輸入一個數字,我收到以下錯誤:

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

顯然,我的setter方法正在接受定期NSNumber而非NSDecimalNumber。我可以以不同的方式配置我的格式化程序,也許使用代碼而不是IB,或者是以NSNumber作爲參數添加額外setter的唯一選項?

回答

1

這不是很清楚,我正是你的問題。格式化程序可以給你一個直接的NSNumber而不是NSDecimalNumber,或者核心數據是。

爲了使NSNumberFormatter給你NSDecimalNumbers,使用方法-setGeneratesDecimalNumbers:

爲了使數據存儲給你NSDecimalNumbers,確保模型相關的屬性設置爲「小數」。

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

如果模型中的屬性類型是十進制數,則生成的對象將是NSDecimalNumber。 – JeremyP 2011-03-06 11:30:45

+0

我剛剛創建了一個新項目,我在其中創建了一個帶有小數屬性的實體。然後我創建了一個帶有表格的接口,並將一個列+格式化程序綁定到該值。結果:1.我綁定到插座的NSNumberFormatter返回NO到generatedDecimalNumber; 2.如果我從屬性值中請求類,我得到NSDecimalNumber,使用以下代碼: NSLog(@「amount class =%@」,[[obj amount] class]); – nephilim 2011-03-07 18:03:00