Iphone 从Switch语句中访问全局变量

Iphone 从Switch语句中访问全局变量,iphone,ios,objective-c,Iphone,Ios,Objective C,我有一个名为total的属性,它是一个NSDecimalNumber。在switch语句中,我试图对数字进行一些简单的加法和减法运算,但我不断收到一个“无法识别的选择器发送到实例””错误。代码如下: switch (t) { case 0: { if (_zero == YES) { _total = [_total decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithString:@"4.5"

我有一个名为
total
的属性,它是一个
NSDecimalNumber
。在switch语句中,我试图对数字进行一些简单的加法和减法运算,但我不断收到一个“
无法识别的选择器发送到实例”
”错误。代码如下:

switch (t) {
case 0:
{
    if (_zero == YES)
    {
        _total = [_total decimalNumberBySubtracting:[NSDecimalNumber decimalNumberWithString:@"4.5"]];
        i = (UIImageView *)[self.view viewWithTag:7];
        i.hidden = YES;
    } else {
        NSDecimalNumber *fourpointfive = [[NSDecimalNumber alloc] initWithDecimal:[[NSNumber numberWithFloat:4.5] decimalValue]];
        _total = [_total decimalNumberByAdding:fourpointfive];
        i = (UIImageView *)[self.view viewWithTag:7];
        i.hidden = NO;
    }
    break;
在相同的方法中,在switch语句之前,我初始化它:

_total = [[NSDecimalNumber alloc] initWithDecimal:[[NSNumber numberWithFloat:0] decimalValue]];
在我的@界面中:

@property (strong, nonatomic) NSDecimalNumber *total;
更新:

将初始化更改为:

_total = [[NSDecimalNumber alloc] initWithString:@"0"];
但它仍然在崩溃。还删除了对
小数值的其他引用

这是我收到的错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber decimalNumberByAdding:]: unrecognized selector sent to instance

在iOS上,NSNumber的decimalValue返回NSDecimal,而不是NSDecimalNumber。

好,问题解决。我正在将我的
NSDecimalNumber
保存到
NSUserDefaults
。保存为默认值的NSDecimalNumber将转换为
NSNumber
,并在再次获取时作为
NSNumber
返回。我从默认值中得到了
floatValue
,并将其转换为
NSDecimalNumber

您能给我们看一下_total的初始值吗。如果你还没有初始化它。。这是你的problem@JamesWebster添加了上面的代码。我更改了,但仍然得到错误。它在小数点位添加行崩溃。我刚刚编译并运行了你的代码。你可能想发布崩溃日志。我刚刚在问题中添加了控制台的错误消息。所以,问题是你在NSNumber上调用decimalNumberByAdding。实际上我刚刚发现。它存储在我的NSUserDefaults中。清除了这些并删除了所有NSNumber引用,但它仍在崩溃。是否应该这样做:NSDecimalNumber*n=[[NSDecimalNumber alloc]initWithInt:0];[默认设置setObject:n forKey:@“totalBurns”];