[英]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.numberOne
和self.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.