Показать NSDecimalNumber как валюту в IB

У меня есть основной объект данных с количеством свойств, который представляет собой NSDecimalNumber. Для этого свойства класс сущности имеет метод, определенный с аргументом NSDecimalNumber as.

В Interface Builder я привязал столбец таблицы к этому свойству (используя NSArrayController), а в ячейке столбца я поставил NSNumberFormatter. Форматтер настроен в IB как «валюта».

Теперь, когда я пытаюсь ввести число, я получаю следующую ошибку:

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

По-видимому, мой метод установки получает обычный NSNumber, а не NSDecimalNumber. Могу ли я настроить средство форматирования по-другому, возможно, в коде, а не в IB, или единственным вариантом является добавление дополнительного средства установки с NSNumber в качестве аргумента?


person nephilim    schedule 06.03.2011    source источник


Ответы (2)


arrow_upward
1
arrow_downward

Мне не ясно, где именно ваша проблема. Либо средство форматирования дает вам прямой NSNumber вместо NSDecimalNumber, либо основные данные.

Чтобы NSNumberFormatter дал вам NSDecimalNumbers, используйте метод -setGeneratesDecimalNumbers:

Чтобы хранилище данных предоставило вам NSDecimalNumbers, убедитесь, что для соответствующего атрибута в модели установлено значение «десятичное число».

person JeremyP    schedule 06.03.2011

arrow_upward
2
arrow_downward

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

person Christian Beer    schedule 06.03.2011
comment
Если тип атрибута в модели представляет собой десятичное число, сгенерированный объект будет NSDecimalNumber. - person JeremyP; 06.03.2011
comment
Я только что создал новый проект, в котором я создал сущность с десятичным свойством. Затем я создал интерфейс с таблицей и привязал столбец + средство форматирования к этому значению. Результат: 1. NSNumberFormatter, который я привязал к розетке, возвращает NO для generatesDecimalNumber; 2. Если я запрашиваю класс из значения свойства, я получаю NSDecimalNumber, используя этот код: NSLog(@amount class = %@, [[obj amount] class]); - person nephilim; 07.03.2011