Ios 目标C中NSInteger到NSString的错误访问异常错误?
我想用Objective-C做一个计算器。我有四个变量。它们在头文件中声明,如以下代码段所示:Ios 目标C中NSInteger到NSString的错误访问异常错误?,ios,objective-c,nsstring,nsinteger,Ios,Objective C,Nsstring,Nsinteger,我想用Objective-C做一个计算器。我有四个变量。它们在头文件中声明,如以下代码段所示: #import <UIKit/UIKit.h> @interface CalculatorAppViewController : UIViewController <UITextFieldDelegate> { NSInteger intanswer, intoperand; NSString *answer, *operand, *currOP;
#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
我有一个名为resultBar的UILabel,它显示应答字符串变量。我试图做的是根据他或她按下的键收集用户输入,并将它们存储到字符串变量中(原因是如果他们按1两次,应该会创建11)。然后,我希望获取应答和操作数变量中的字符串,将它们转换为整数,进行算术运算,将解决方案作为字符串存储到应答变量中,并显示UILabel resultBar上现在保存的应答
我的主要问题是,我似乎无法将NSString answer变量转换为NSInteger intanswer。这是一段代码:
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\u BAD\u访问(代码=1,地址=0x408c5e2f)异常,我不知道为什么
任何帮助都很重要。如果我能提供更多信息,请告诉我!非常感谢:)通常您希望属性对象中的
NSString
使用strong
或copy
,answer
,操作数
,currOP
,这样它们就不会过早地被释放
您需要仔细阅读对象生命周期以及assign
、strong和copy`的正确用法
在这种情况下,answer
看起来不再保留,指针现在指向导致崩溃的垃圾。将NSString
属性上的“分配”更改为“复制”
您仍然需要NSLog(@“answer:%@”,answer)
并且它需要有一个值。错误的确切含义是什么?你确定它不是其他类吗?[NSNull]还是smth?在那个里放一个断点,在控制台中放一个“po[answer class]”,看看它是什么类。也许是UITextField——很难说没有看到整个项目;不要“阅读”你的输出。你的计算器应该在内部以数字的形式记录所有这些信息,然后格式化输出结果。为什么要在错误后显示代码而不是错误前显示代码。例如如何声明intanswer
,以及answer
的NSLog()
。很抱歉,我对问题的描述不清楚。关于我的项目,我已经提供了一些更清晰的信息@ZaphSo是否有任何分配给答案?
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;