0

我开发了一个简单的计算器 iPhone 应用程序。只是为了练习目的。我有一个 IBAction 方法来存储用户输入的数字。整个概念是计算器应用程序堆积待处理的操作,因此用户可以执行多个操作,屏幕显示结果如下:1 + 2 - 4 + 10 = X。所以我有两个 NSMutableArray 存储 NSNumber 数字和操作员动作。当用户单击操作员按钮时,会为新数字创建一个新的数组元素。当用户输入数字时,最后一个数组元素会自行更新,直到按下操作员按钮。

问题是每个数组元素都是零。当我设置它时,它在方法内部存储了正确的值,但是当该方法被执行并再次调用时,它只包含零而不是输入的数字。存在 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 方法。它将值设置为零。我在评论部分链接了这篇文章下面的完整源代码。唯一的问题是:为什么调用这个方法?什么叫这种方法?

UPDATE2:在萨德的帮助下,我设法解决了这个问题。谢谢大家!:)

4

2 回答 2

1

遇到此问题的唯一可能方法是始终如此sender.tag == 0。所以你一定要检查一下。我的观点是,没有其他可能的情况会产生这些症状,所以它必须是这样。

于 2012-05-05T21:47:08.160 回答
0

好的,我知道了,

这里的一件事是首先检查您的发件人的标签,无论是通过braekpoint还是通过点击Digit方法中的NSLog,我猜标签永远不会超过零,因此数组中的最后一个对象将始终为零,进一步,放置nslog或断点您将对象添加到数组的所有地方。

在界面中。

@property(nonatomic, retain) NSMutableArray* numberArray;

在实施中,

@synthesize numberArray = _numberArray;

在交易中

[_numberArray release];

好的,现在接下来要做的是在 init 中创建一个数组,即

NSMutableArray* arr = [NSMutableArray alloc] init];
self.numberArray = arr;
[arr release];

[self.numberArray addObject:[NSNumber numberWithDouble:0]];
于 2012-05-05T21:43:39.933 回答