在Objective-C中NSInteger到NSString坏访问异常错误?

时间:2014-09-17 17:50:05

标签: ios objective-c nsstring nsinteger

我正在尝试使用Objective-C制作计算器。我有四个变量,我正在使用。它们在头文件中声明,如下面的代码片段所示:

   #import <UIKit/UIKit.h>

   @interface CalculatorAppViewController : UIViewController <UITextFieldDelegate> {
   NSInteger intanswer, intoperand;
   NSString *answer, *operand, *currOP;
   }


   @property (nonatomic, assign) NSInteger intoperand;
   @property (nonatomic, assign) NSInteger intanswer;
   @property (nonatomic, assign) NSString *answer;
   @property (nonatomic, assign) NSString *operand;
   @property (nonatomic, assign) NSString *currOP;

   //these are not all my variables, just the ones in question

通过以下方式将变量引入实现文件:

   @synthesize intanswer, intoperand, answer, operand, opPressed, currOP, resultBar, clear, negpos, percent, one, two, three, four, five, six, seven, eight, nine, zero, divi, multi, addi, subt, enter, point; 

我有一个名为resultBar的UILabel,它显示了答案字符串变量。我试图做的是根据他或她按下的内容收集用户输入并将它们存储到字符串变量中(原因是如果他们按1两次,它应该创建11)。然后,我希望获取答案和操作数变量中的字符串,将它们转换为整数,进行算术运算,将解决方案作为字符串存储到答案变量中,并在UILabel resultBar上显示现在的答案。

我的主要问题是我似乎无法将我的NSString应答变量转换为NSInteger转换器。这是一段代码:

  intanswer = [answer integerValue]; //error line, this is where the error code is
  intoperand = [operand integerValue];

  intanswer = intanswer + intoperand; 

  answer = [NSString stringWithFormat: @"%d", (NSInteger)intanswer];
  resultBar.text = answer;

我得到Thead 1:EXC_BAD_ACCESS(code = 1,address = 0x408c5e2f)异常,我不知道为什么。

任何帮助都很重要。如果我能提供更多信息,请告诉我!非常感谢你:)

1 个答案:

答案 0 :(得分:1)

一般来说,您希望strongcopy NSString属性对象:answeroperandcurrOP所以它们不会是过早解除分配。

您需要了解对象的生命周期以及assign,强and副本`的正确用法。

在这种情况下,看起来answer不再被保留,指针现在指向垃圾导致崩溃。在NSString属性上将'assign'更改为'copy'。

您仍然需要NSLog(@"answer: %@", answer),并且需要有值。