0

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

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

4

3 回答 3

1

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

最简单的解决方案是:

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

这些floatValue属性实际上会将文本转换为float. 那么也许您甚至不需要self.numberOneandself.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如果您需要更强大的支持,还有更高级的方法可以使用等来转换为数值。有很多关于这方面的文档。

于 2013-08-02T16:11:03.393 回答
0

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

于 2013-08-02T16:12:11.043 回答
-1

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

release variableName;

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

于 2013-08-02T16:16:17.327 回答