0

我是 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:@""];
}}

转换结果代码:

 -(double) convertResult 
{
double convertedFraction;
convertedFraction = [accumulator convertToNum];

return convertedFraction;
} 

(累加器是一个 Fraction 对象,其中包含对 2 个操作数进行的数学运算的值)

和 ConverToNum 函数:

 -(double) convertToNum
{
if (denominator != 0)
    return (double) numerator/denominator;
else
    return NAN;
 }

应用程序中的其他所有内容都可以正常工作,因此我所做的事情一定有问题……有人可以帮忙吗?我整天都在网上搜索,但我读到了关于这个 SIGABRT 错误的完全不同的东西。谢谢您的帮助

4

1 回答 1

3

如果displayStringNSString,则没有setString设置器。只需将字符串分配给displayString.

代替

[displayString setString:@""]

做:

displayString = @"";

编辑:

你说那displayString是一个NSMutableString。在这种情况下,您的第一个任务是displayString

displayString = [NSString stringWithFormat: @"%e", [myCalculator convertResult]];

将不可变对象分配给 displayString 指针。我不知道为什么编译器不抱怨这一点。然后,当您尝试调用setStringon 时,即使您已将指针声明为displayString,对象的实际类型也是如此。要解决此问题,请尝试:NSStringNSMutableString

displayString = [[NSString stringWithFormat: @"%e", [myCalculator convertResult]] mutableCopy];

或者:

[displayString setString:[NSString stringWithFormat: @"%e", [myCalculator convertResult]]];

或者:

displayString = [NSMutableString stringWithFormat: @"%e", [myCalculator convertResult]];
于 2013-05-15T18:11:50.180 回答