首先,我要提前感谢SO社区的每个人帮助我摆脱困境。
我的应用程序遇到运行时错误,我已经隔离了导致错误的行。
当我尝试添加两个NSDecimalNumber变量时,使用.adding方法,我收到这个"无法识别的选择器发送到实例"错误:
由于未捕获的异常而终止应用 ' NSInvalidArgumentException',原因:' - [__ NSCFNumber decimalNumberByAdding:]:发送到实例的无法识别的选择器 0x608002c361a0'
我已创建虚拟NSDecimalNumber变量来尝试调试此问题,并且它们在添加时似乎工作正常。但是,在处理具有NSDecimalNumber变量的NSManagedObject变量(result
和newTransaction
)时,我遇到了此错误。
以下是导致这些问题的代码:
//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变量却不能?
再次感谢!
答案 0 :(得分:1)
“Double”类型的核心数据属性存储为NSNumber
托管对象上下文。改变中的类型是不够的
NSManagedObject
子类,因为创建了访问器方法
在运行时动态。您的代码编译,但在运行时崩溃
因为变量是NSNumber
而不是NSDecimalNumber
。
解决方案是在Core Data模型中将类型设置为“Decimal” 检查员。