我是Objective-C编程和X-Code的新手,所以请耐心等待。我从一本关于目标C的书中复制了代码来制作一个计算器课程并且它正在创造奇迹。然后它告诉我作为练习的一部分添加转换按钮将分数转换为双倍并打印它。问题是,当我按下转换按钮时,应用程序停止,我收到一条消息,说该程序收到了SIGABRT信号。
这是按钮代码:
-(IBAction)clickConvert //convert method
{
if ( [myCalculator accumulator] != 0 ){
displayString = [NSString stringWithFormat: @"%e", [myCalculator convertResult]];
display.text = displayString;
[displayString setString:@""];
}}
convertResult代码:
-(double) convertResult
{
double convertedFraction;
convertedFraction = [accumulator convertToNum];
return convertedFraction;
}
(accumulator是一个Fraction对象,包含在2个操作数上完成的数学运算的值)
和ConverToNum函数:
-(double) convertToNum
{
if (denominator != 0)
return (double) numerator/denominator;
else
return NAN;
}
应用程序中的其他所有内容都可以正常运行,因此我所做的事情一定是个问题......任何人都可以提供帮助吗?我一整天都在网上搜索,但是我读到了有关此SIGABRT错误的完全不同的内容。谢谢你的帮助
答案 0 :(得分:3)
如果displayString
是NSString
,则没有setString
设置者。只需将字符串分配给displayString
。
而不是
[displayString setString:@""]
做的:
displayString = @"";
编辑:
您说displayString
是NSMutableString
。在这种情况下,您首次转到displayString
:
displayString = [NSString stringWithFormat: @"%e", [myCalculator convertResult]];
将一个不可变对象分配给displayString指针。我不知道为什么编译器不抱怨这个。然后,当您尝试在setString
上调用displayString
时,即使您已将指针声明为NSString
,对象的实际类型仍为NSMutableString
。要解决此问题,请尝试:
displayString = [[NSString stringWithFormat: @"%e", [myCalculator convertResult]] mutableCopy];
或:
[displayString setString:[NSString stringWithFormat: @"%e", [myCalculator convertResult]]];
或:
displayString = [NSMutableString stringWithFormat: @"%e", [myCalculator convertResult]];