我无法弄清楚为什么我一直收到这个错误。每当我按下我的应用程序中的按钮时,整个事情就会崩溃。这是代码:
#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或其他任何地方。
答案 0 :(得分:1)
假设firstNum和secondNum是UITextFields - 这些对象的text
属性将为NSStrings
。您无法通过转换为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
等转换为数字值或从数值转换。有很多关于这方面的文件。
答案 1 :(得分:0)
进入项目导航器(左侧窗口)并进入断点选项卡(看起来像胡萝卜)然后添加异常断点。此断点应显示崩溃发生的位置。我怀疑问题是试图将NSString强制转换为NSNumber。改为使用intValue,floatValue或doubleValue。
答案 2 :(得分:-1)
您需要释放用于这些变量的内存
release variableName;
例如,我不确定什么类型的numberOne,而numberTwo是