我得到这个“线程1:信号SIGABRT”

时间:2013-08-02 16:06:08

标签: ios objective-c crash addition

我无法弄清楚为什么我一直收到这个错误。每当我按下我的应用程序中的按钮时,整个事情就会崩溃。这是代码:

#import "additionViewController.h"

@interface additionViewController (){
}

@end

@implementation additionViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)getValue: (id)sender {
    self.numberOne = (NSNumber *)self.firstNum.text;
    self.numberTwo = (NSNumber *)self.secondNum.text;
    self.fnumberOne = [self.numberOne floatValue];
    self.fnumberTwo = [self.numberTwo floatValue];

    self.finalValue = [NSNumber numberWithFloat:(self.fnumberOne + self.fnumberTwo)];

    self.sum.text = (NSString *)self.finalValue;


}
@end

这是我自己尝试制作的第一款iOS应用。这很简单。不在App Store或其他任何地方。

3 个答案:

答案 0 :(得分:1)

假设firstNum和secondNum是UITextFields - 这些对象的text属性将为NSStrings。您无法通过转换为NSNumber将它们转换为数字。这只会改变指针的类型,但不会实际将数据表示从文本转换为数字。

最简单的解决方案是:

self.fnumberOne = self.firstNum.floatValue;
self.fnumberTwo = self.secondNum.floatValue;

floatValue属性实际上会将文本转换为float。那么也许您甚至不需要self.numberOneself.numberTwo属性?如果您仍然这样做,您可以这样做(如果您也需要,也可以使用self.finalNumber):

self.fnumberOne = self.firstNum.floatValue;
self.fnumberTwo = self.secondNum.floatValue;
self.numberOne = @(self.fnumberOne);
self.numberTwo = @(self.fnumberTwo);

@()语法是将基元包装在其关联对象类型中的便捷方式,在本例中为NSNumber

此外,您将遇到self.sum.text = (NSString *)self.finalValue的类似问题 - 您无法使用C转换运算符,您需要将该值实际转换回字符串。简单的解决方案是:

self.sum.text = [NSString stringWithFormat:@"%f", self.fnumberOne + self.fnumberTwo];

如果您需要更强大的支持,还有更多高级方法可以使用NSNumberFormatter等转换为数字值或从数值转换。有很多关于这方面的文件。

答案 1 :(得分:0)

进入项目导航器(左侧窗口)并进入断点选项卡(看起来像胡萝卜)然后添加异常断点。此断点应显示崩溃发生的位置。我怀疑问题是试图将NSString强制转换为NSNumber。改为使用intValue,floatValue或doubleValue。

答案 2 :(得分:-1)

您需要释放用于这些变量的内存

release variableName;

例如,我不确定什么类型的numberOne,而numberTwo是