数组中的NSDecimalNumbers导致“无法识别的选择器...”消息

时间:2013-10-14 20:08:39

标签: ios objective-c

我已经玩了几个月的obj-c并且对许多事情感到满意,但是不能理解看似非常简单的事情。我需要能够从NSString拆分成一个数组,然后从该数组中获取NSDecimalNumbers。如果我尝试执行任何计算,我会得到一个“无法识别的选择器发送到实例”。如果我只是打印每个十进制数字一切顺利。如果我将值手动放入NSDecimalNumbers而不是从也可以工作的数组中提取。错误和代码如下。

  

2013-10-14 15:54:42.174测试[30829:c07] - [__ NSCFString   decimalNumberByAdding:]:发送到实例的无法识别的选择器   0x75a81f0 2013-10-14 15:54:42.176测试[30829:c07] *终止应用   由于未捕获的异常'NSInvalidArgumentException',原因:   ' - [__ NSCFString decimalNumberByAdding:]:发送到无法识别的选择器   实例0x75a81f0'   * 第一次抛出调用堆栈:(0x1c90012 0x10cde7e 0x1d1b4bd 0x1c7fbbc 0x1c7f94e 0x2075 0x10e1705 0x152c0 0x15258 0xd6021 0xd657f 0xd56e8   0x44cef 0x44f02 0x22d4a 0x14698 0x1bebdf9 0x1bebad0 0x1c05bf5   0x1c05962 0x1c36bb6 0x1c35f44 0x1c35e1b 0x1bea7e3 0x1bea668 0x11ffc   0x1bfd 0x1b25)libc ++ abi.dylib:terminate调用抛出异常

-(IBAction)buttonPushed: (id) sender
{
    NSString* s = @"25.55, 109.24";
    NSArray* a = [s componentsSeparatedByString: @" "];
    NSDecimalNumber* dec1 = [a objectAtIndex: 0];
    NSDecimalNumber* dec2 = [a objectAtIndex: 1];
    NSDecimalNumber* sum = [dec1 decimalNumberByAdding: dec2];
    statusText.text = [NSString stringWithFormat: @"%@", sum, nil];
}

3 个答案:

答案 0 :(得分:4)

NSDecimalNumber* dec1 = [a objectAtIndex: 0];

没有为您提供NSDecimalNumber对象。它为您提供了一个字符串(通过调用componentsSeparatedByString创建)

尝试这样做:

NSDecimalNumber* dec1 = [NSDecimalNumber decimalNumberWithString: [a objectAtIndex: 0]];

看看你是否有更好的运气。

答案 1 :(得分:3)

你从未创建过NSDecimalNumber对象

NSArray* a = [s componentsSeparatedByString: @", "];

当然会创造一个字符串。

仅仅因为你将指针键入为十进制数字,并不能使obejct为一个

 NSDecimalNumber* dec1 = [a objectAtIndex: 0];

dec1仍然是NSString。尝试

NSDecimalNumber* dec1 = [NSDecimalNumber decimalNumberWithString:[a objectAtIndex: 0]];
NSDecimalNumber* dec2 = [NSDecimalNumber decimalNumberWithString:[a objectAtIndex: 1]];

NSDecimalNumber* sum = [dec1 decimalNumberByAdding: dec2];
statusText.text = [NSString stringWithFormat: @"%@", sum];

答案 2 :(得分:0)

当您致电刚刚返回字符串的[a objectAtIndex: 0]时,您正试图转换为NSDecimalNumber

相反,请尝试使用以下内容:

-(IBAction)buttonPushed: (id) sender
{
    NSString* s = @"25.55, 109.24";
    NSArray* a = [s componentsSeparatedByString: @", "];
    NSDecimalNumber* dec1 = [NSDecimalNumber decimalNumberWithString:[a objectAtIndex: 0]];
    NSDecimalNumber* dec2 = [NSDecimalNumber decimalNumberWithString:[a objectAtIndex: 1]];

    NSDecimalNumber* sum = [dec1 decimalNumberByAdding: dec2];
    statusText.text = [NSString stringWithFormat: @"%@", sum, nil];
}

另请注意,我将字符串拆分为“,”而不只是“”,否则第一个字符串将为“25.55”,

有关详细信息,请参阅NSDecimalNumber文档:https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSDecimalNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDecimalNumber/decimalNumberWithString