我已经玩了几个月的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];
}
答案 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: