为啥来自 NSString 分配的 NSDecimalNumber 会失败?
Posted
技术标签:
【中文标题】为啥来自 NSString 分配的 NSDecimalNumber 会失败?【英文标题】:Why does this NSDecimalNumber from NSString assignment fail?为什么来自 NSString 分配的 NSDecimalNumber 会失败? 【发布时间】:2017-12-20 07:30:37 【问题描述】:我有一段非常简单的代码在设置 NSDecimalNumber 时会崩溃。
代码如下所示
NSDecimalNumber *price = nil;
NSString *variantPrice = nil;
variantPrice = fcVariantRow[@"fcVariantPrice"];
price = [NSDecimalNumber decimalNumberWithString:variantPrice];
使用以下崩溃信息将值分配给可变价格时崩溃
2017-12-20 15:26:11.523917+0800 NWMPos[28837:18554790] -[__NSCFNumber
length]: unrecognized selector sent to instance 0xb000000000000635
2017-12-20 15:26:11.525159+0800 NWMPos[28837:18554790] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000635'
*** First throw call stack:
(0x187151d04 0x1863a0528 0x18715f1c8 0x1871576b0 0x18703d01c 0x187b6ceac 0x187b6aa38 0x187b6b0a0 0x1041131a0 0x1905bd608 0x1905bd588 0x104d9f83c 0x104d9d438 0x1905bd608 0x1905bd588 0x1905a82f0 0x1905bce7c 0x1905bc99c 0x1905b7e6c 0x190589378 0x190ed685c 0x190ed8de8 0x190ed1d04 0x1870fa2e8 0x1870fa268 0x1870f9af0 0x1870f76c8 0x187017fb8 0x188eaff84 0x1905ec2e8 0x1041151e8 0x186b3a56c)
libc++abi.dylib: terminating with uncaught exception of type NSException
调试显示 NSString 的正确值如下
017-12-20 15:26:11.523626+0800 NWMPos[28837:18554790] Jongel 4 = 99
99 是 NSString 的值
为什么会崩溃?
【问题讨论】:
variantPrice
似乎是 NSNumber
,而不是 NSString
是的,就是这样,使用 [NSString stringWithFormat:@"%@", fcVariantRow[@"fcVariantPrice"]];修复了这个问题,我真的不明白为什么在将它分配给 NSString 变量时需要强制它为 NSString
因为“强制转换”或分配指针不会转换值,在您的情况下,您只是分配一个指针。
嗯知道了,如果你回答我会接受它
【参考方案1】:
fcVariantRow[@"fcVariantPrice"] returns NSNumber type.
只需使用
price = (NSDecimalNumber*) fcVariantRow[@"fcVariantPrice"];
【讨论】:
是否将NSNumber
转换为NSDecimalNumber
转换值?以上是关于为啥来自 NSString 分配的 NSDecimalNumber 会失败?的主要内容,如果未能解决你的问题,请参考以下文章