2016-11-06 5 views
0

Прежде всего, позвольте мне поблагодарить всех в сообществе SO заранее за вашу помощь в том, чтобы вытащить меня из этой пробки.NSDecimalNumber.adding от NSManagedObjects, ударяющего по нераспознанной проблеме выбора

Мое приложение ударяет ошибку времени выполнения, и я выделил строку, вызывающую ошибку.

При попытке добавить две переменные NSDecimalNumber использовать метод .adding, я получаю это «непризнанный селектор отправляется, например» Ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber decimalNumberByAdding:]: unrecognized selector sent to instance 0x608002c361a0'

Я создал фиктивные переменные NSDecimalNumber попробовать и отлаживать этот вопрос , и они, похоже, отлично работают при добавлении. Однако при работе с моими переменными NSManagedObject (result и newTransaction), которые имеют переменные NSDecimalNumber, я сталкиваюсь с этой ошибкой.

Ниже приведен код, который вызывает эти вопросы:

//Testing with dummy variables 
let a1 = NSDecimalNumber(decimal: 5.2) 
let a2 = NSDecimalNumber(decimal: 10.8) 

print ("a1: \(a1), a2: \(a2)")   //a1: 5.2, a2: 10.8 

let a3 = a1.adding(a2) 

print ("a3: \(a3)")     //a3: 16 
//Great, everything above works fine. 

//Now let's try using my NSManagedObjects, which were defined in another section 
let a = result.netChange    //result.netChange is of class NSDecimalNumber 
let b = newTransaction.amount   //newTransaction.amount is of class NSDecimalNumber 

print ("a: \(a), b: \(b)")    //a: 444.12, b: 22.23 

let c = a.adding(b)     //<---This is where the app crashes 

print ("c: \(c)")      //Does not print, as the app has stopped 

Моего вопрос: Почему мои фиктивная возможность добавлять друг с другом, в то время как мое NSManagedObject переменные не может?

Еще раз спасибо!

+1

Вы указали свойство как «Десятичный» в инспекторе модели данных ядра? Что означает 'print (type (of: result.netChange))' show? –

+0

@MartinR показывает «__NSCFNumber» как для «result.netChange», так и для «newTransaction.amount» –

+0

@MartinR Я вижу, с чем вы столкнулись. Я обновил инспектор модели данных ядра - переменные теперь имеют тип Decimal (раньше они были типа Double). Это устранило проблему. Спасибо за вашу помощь! Как я могу проголосовать за ваш ответ? –

ответ

1

Свойство данных ядра типа «Двойной» хранится как NSNumber в контексте управляемого объекта . Недостаточно изменить тип в подклассе NSManagedObject, потому что методы доступа создаются динамически во время выполнения. Ваш код компилируется,, но сбой во время выполнения , поскольку переменная является NSNumber, а не NSDecimalNumber.

Решение состоит в том, чтобы установить тип «Десятичный» в контрольной группе Core Data модели .

+0

Это решило мою проблему - спасибо @MartinR –