我正在尝试为计算器创建一个方形按钮,它应该从MainLabel中获取值,将其与自身相乘,然后更新以显示结果。
我正在使用的代码是:
- (IBAction)squarePressed:(id)sender
{
NSString *mainLabelString = mainLabel.text;
int mainlabelValue = [mainLabelString intValue];
NSString *calculatedValue = ((mainlabelValue)*(mainlabelValue));
mainLabel.text = calculatedValue;
}
当我按下模拟器中的按钮时,它会暂停,线程1会在最后一行说出来;
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x51)
这是什么意思,我该怎么办?
最佳答案
这意味着您尝试访问没有对象的对象。一条消息已发送到已重新分配的对象或指向内存中垃圾的指针。
您应该在方法中设置断点并进行调试;以查看您的代码是否被点击。如果是这样,则仅需要逐步检查并确定有问题的行,然后找出哪个指针不正确(尝试使用调试器打印对象)即可。
我们不可能知道您的错误的确切来源,但是如果我想根据您的代码进行猜测,也许您忘记了在Interface Builder中连接mainLabel
,因此当您的方法是时,它不会指向有效的标签。跑 ?
错误的下一个(也是最可能的)来源是您为mainLabel.text
指针分配了一个整数值。您应该在此处收到警告,但是如果忽略该警告,则整数将被分配为指针。显然,该整数是指向有效ObjC对象的指针的机会非常小,因此该程序在尝试再次访问mainLabel.text
时失败。如另一个答案所述,您应该使用以下数字创建一个字符串:
NSString *calculatedValue = [NSString stringWithFormat: @"%d", mainLabelValue*mainLabelValue];
遇到错误时,您尝试使用的数字是否为9?该消息表明您尝试访问内存位置0x51,巧合的是十进制为81 = 9 * 9。使用
stringWithFormat
将数字格式化为字符串,然后将返回的字符串指针分配给字符串指针属性mainLabel.text
,将解决您的问题。您需要注意自己的类型。关于objective-c - 为什么iOS模拟器会对此暂停?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13658685/