NSDecimalNumber.adding 来自 NSManagedObjects 遇到无法识别的选择器问题
NSDecimalNumber.adding from NSManagedObjects hitting unrecognized selector issue
首先,让我提前感谢 SO 社区中的每一个人,感谢你们帮助我摆脱困境。
我的应用遇到 运行时间错误,我已经隔离了导致错误的行。
当我尝试使用 .adding 方法添加两个 NSDecimalNumber 变量时,我收到此 "unrecognized selector sent to instance" 错误:
Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-[__NSCFNumber
decimalNumberByAdding:]: unrecognized selector sent to instance
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 变量不能?
再次感谢!
"Double" 类型的核心数据 属性 存储为 NSNumber
在
托管对象上下文。仅更改类型中的类型是不够的
NSManagedObject
子类,因为创建了访问器方法
在运行时动态地。您的代码 编译, 但在运行时崩溃
因为变量是 NSNumber
而不是 NSDecimalNumber
.
解决方法是在Core Data模型中设置type为"Decimal"
检查员.
首先,让我提前感谢 SO 社区中的每一个人,感谢你们帮助我摆脱困境。
我的应用遇到 运行时间错误,我已经隔离了导致错误的行。
当我尝试使用 .adding 方法添加两个 NSDecimalNumber 变量时,我收到此 "unrecognized selector sent to instance" 错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber decimalNumberByAdding:]: unrecognized selector sent to instance 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 变量不能?
再次感谢!
"Double" 类型的核心数据 属性 存储为 NSNumber
在
托管对象上下文。仅更改类型中的类型是不够的
NSManagedObject
子类,因为创建了访问器方法
在运行时动态地。您的代码 编译, 但在运行时崩溃
因为变量是 NSNumber
而不是 NSDecimalNumber
.
解决方法是在Core Data模型中设置type为"Decimal" 检查员.