繁体   English   中英

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

[英]I get this “Thread 1: signal SIGABRT”

我不知道为什么我总是收到此错误。 每当我按应用程序中的按钮时,整个事件就会崩溃。 这是代码:

#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或其他任何东西。

假设firstNum和secondNum是UITextFields-这些对象的text属性将是NSStrings 您不能通过NSNumber转换为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等使用更高级的方法与数字值进行相互转换。 有很多有关的文档。

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

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

release variableName;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM