gpt4 book ai didi

ios - 简单的计算器应用程序,当我添加新按钮时出现 SIGABRT 错误

转载 作者:行者123 更新时间:2023-11-28 20:19:15 25 4
gpt4 key购买 nike

我是 Objective-C 编程和 X-Code 的新手,所以请多多包涵。我从一本关于 objective-c 的书中复制了代码来制作一个计算器类,它正在创造奇迹。然后它要求我作为练习的一部分添加一个转换按钮以将分数转换为 double 并打印它。问题是,当我按下转换按钮时,应用程序停止了,我收到一条消息说程序收到了 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;
}

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

和 ConverToNum 函数:

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

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

最佳答案

如果 displayString 是一个 NSString,则没有 setString setter。只需将字符串分配给 displayString

代替

[displayString setString:@""]

做:

displayString = @"";

编辑:

你说 displayString 是一个 NSMutableString。在这种情况下,您对 displayString 的第一个赋值:

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

将不可变对象(immutable对象)分配给 displayString 指针。我不知道为什么编译器不提示这个。然后,当您尝试在 displayString 上调用 setString 时,对象的实际类型是 NSString,即使您已将指针声明为 NSMutableString。要解决此问题,请尝试:

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

或:

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

或:

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

关于ios - 简单的计算器应用程序,当我添加新按钮时出现 SIGABRT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com