我正在尝试为计算器创建一个方形按钮,它应该从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/

10-08 20:52