【发布时间】:2017-04-17 08:36:59
【问题描述】:
我正在从云服务下载一些值作为 JSON 对象并将它们分配给 NSString 对象,如下所示
NSString *price = [orpObjectDict objectForKey:@"price"];
NSString *qty = [orpObjectDict objectForKey:@"qty"];
我的调试输出显示两个字符串的值如下
NSLog(@"price: %@ <--> qty: %@", price, qty);
2017-04-17 16:29:05.665043 NWMobileTill[1490:730225] price: 6.95 <--> qty: 1
但是下面使用这些 NSStrings 创建 NSDecimalNumber 失败
NSDecimalNumber *priceNumber = [NSDecimalNumber decimalNumberWithString:price];
NSDecimalNumber *qtyNumber = [NSDecimalNumber decimalNumberWithString:qty];
017-04-17 16:29:05.665886 NWMobileTill[1490:730225] -[__NSCFNumber length]: unrecognized selector sent to instance 0x174226240
2017-04-17 16:29:05.668080 NWMobileTill[1490:730225] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x174226240'
*** First throw call stack:
(0x1926fd1b8 0x19113455c 0x192704268 0x192701270 0x1925fa80c 0x19323658c 0x1932340f0 0x193234754 0x1000d9078 0x192cff1e8 0x192d17120 0x1931ebfb0 0x193130aa8 0x1931210a4 0x1931ee35c 0x1006c5218 0x1006d2aec 0x1006c8ce0 0x1006d4e2c 0x1006d4b78 0x19178f2a0 0x19178ed8c)
libc++abi.dylib: terminating with uncaught exception of type NSException
为什么这个简单的创建会崩溃?
【问题讨论】:
-
Objective-C 在对象类型方面相当松散;特别是,
NSDictionary是 heterogeneous 并且可以包含任何内容。我会确保qty实际上是NSString -
我如何确保它是?你可以看到我将它分配给一个 NSString,如果这还不够,我怎样才能确保它是双重的?
-
我认为
if ([qty isKindOfClass: [NSString class]]) { ...应该告诉你它是否是一个字符串。此外,在调试器中设置断点并将鼠标悬停在变量上应该会告诉您。
标签: ios objective-c nsdecimalnumber