Показать 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)


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

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

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

person JeremyP    schedule 06.03.2011

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