iphone - NSNumber 存储零值而不是正确的数值

标签 iphone objective-c ios

我正在开发一个简单的计算器 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/

相关文章:

iphone - 如何添加HUD? (iOS)

iphone - 将内容保存在文档目录或临时文件夹中有什么区别?

ios: NSMutableArray 计数在添加对象后打印零?

ios - 从 SDK 返回 App

ios - 在图像后的 UITextField 中添加空间

ios - Testflight 不允许使用 iOS 8.1 SDK 编译的 iOS 7.1 应用程序安装在 iOS 7.1.2 iPhone 上

iPhone 潜在的泄漏对象在行中分配...并存储到

iphone - 将另一个 Nib 加载到 viewController 中

ios - 使用 url 动态创建文件夹

ios - 用于创建可变副本的 Objective-C 模式