来自NSManagedObjects的NSDecimalNumber.adding遇到无法识别的选择器问题

时间:2016-11-06 05:31:14

标签: swift nsdecimalnumber

首先,我要提前感谢SO社区的每个人帮助我摆脱困境。

我的应用程序遇到运行时错误,我已经隔离了导致错误的行。

当我尝试添加两个NSDecimalNumber变量时,使用.adding方法,我收到这个"无法识别的选择器发送到实例"错误:

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' - [__ NSCFNumber   decimalNumberByAdding:]:发送到实例的无法识别的选择器   0x608002c361a0'

我已创建虚拟NSDecimalNumber变量来尝试调试此问题,并且它们在添加时似乎工作正常。但是,在处理具有NSDecimalNumber变量的NSManagedObject变量(resultnewTransaction)时,我遇到了此错误。

以下是导致这些问题的代码:

//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 个答案:

答案 0 :(得分:1)

“Double”类型的核心数据属性存储为NSNumber 托管对象上下文。改变中的类型是不够的 NSManagedObject子类,因为创建了访问器方法 在运行时动态。您的代码编译,但在运行时崩溃 因为变量是NSNumber而不是NSDecimalNumber

解决方案是在Core Data模型中将类型设置为“Decimal” 检查员。