我正在开发一个简单的计算器 iPhone 应用程序。只是为了练习的目的。我有一个 IBAction 方法来存储用户输入的数字。整个概念是计算器应用程序堆积待处理的操作,以便用户可以执行多个操作,并且屏幕按以下方式显示结果:1 + 2 - 4 + 10 = X。所以我有两个存储 NSNumber 数字的 NSMutableArray 和运算符(operator)的 Action 。当用户单击运算符按钮时,将为新数字创建一个新的数组元素。当用户输入数字时,最后一个数组元素会自行更新,直到按下操作按钮。
问题是每个数组元素都为零。在方法内部,当我设置它时,它会存储正确的值,但是当执行并再次调用该方法时,它只包含零而不是输入的数字。 NSNumber 对象存在,数组包含每个数字,但每个数字都是 0。
方法如下:
// Processing digit buttons
- (IBAction)clickDigit: (UIButton *) sender {
double currentNumber = [[numbers lastObject] doubleValue];
// Get the digit
double digit = sender.tag;
// Do nothing when the currentNumber and the digit both zero
if(currentNumber == 0 && digit == 0) {
return;
}
// When currentNumber is zero, override the value
if(currentNumber == 0) {
currentNumber = digit;
[numbers removeLastObject];
[numbers addObject: [NSNumber numberWithDouble: currentNumber ]];
// Else, add the digit to currentNumber
} else {
currentNumber = currentNumber * 10 + digit;
[numbers removeLastObject];
[numbers addObject: [NSNumber numberWithDouble: currentNumber ]];
}
// Update the screen
[self updateDisplay];
}
我不知道出了什么问题。有什么建议么? 提前致谢
更新:事实证明,每次按下按钮后都会自动调用 clickClear 方法。它将值设置为零。我在评论部分链接了这篇文章下面的完整源代码。唯一的问题是:为什么调用这个方法?这个方法叫什么?
更新2:在萨德的帮助下,我成功解决了这个问题。谢谢大家! :)
最佳答案
遇到此问题的唯一可能的方法是始终使用sender.tag == 0
。所以你绝对应该检查一下。我的观点是,没有其他可能的情况会产生这些症状,所以它一定是这样。
关于iphone - NSNumber 存储零值而不是正确的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465953/