当我尝试使用decimalNumberByMultiplyingBy时,为什么NSDecimalNumber崩溃:?

Le *_*ced 0 objective-c nsnumber

我正在尝试从用户默认值中检索一个数字并将其相乘.这是我的代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSDecimalNumber *current = [prefs  objectForKey:@"account"];
NSDecimalNumber *multiplier = [NSDecimalNumber decimalNumberWithString:@"1.15"];
NSDecimalNumber *floo = [current decimalNumberByMultiplyingBy: multiplier];
Run Code Online (Sandbox Code Playgroud)

一旦碰到这floo条线,它就会给我一个非常可怕的崩溃.巨大的错误gobbledygook开始于:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__NSCFNumber decimalNumberByMultiplyingBy:]: unrecognized selector 
sent to instance 0x8c7b1e0'
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,但我的天啊!发生了什么?

Sea*_*ell 5

您已将值赋给[prefs objectForKey:@"account"]NSDecimalNumber变量,但实际值是NSNumber,而不是NSDecimalNumber.当您尝试调用-decimalNumberByMultiplyingBy:该对象时,程序崩溃,因为该对象不知道如何处理该方法.

您可以将NSNumber转换为NSDecimalNumber,如下所示:

NSNumber *number = /* ... */
NSDecimalNumber *decimalNumber = 
    [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]];
Run Code Online (Sandbox Code Playgroud)