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

时间:2012-05-05 21:00:39

标签: iphone objective-c ios

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

问题是每个数组元素都为零。在方法内部,它在我设置时存储了corrent值,但是当执行该方法并再次调用时,它只会为零而不是输入的数字。 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];
}

我不知道出了什么问题。有什么建议? 提前致谢

UPDATE :事实证明,每次按下按钮后都会自动调用clickClear方法。它将值设置为零。我在评论部分链接了这篇文章下面的完整源代码。唯一的问题是:为什么这个方法叫?什么叫这种方法?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

好的,

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

界面中的

@property(nonatomic, retain) NSMutableArray* numberArray;

在实施中,

@synthesize numberArray = _numberArray;

in dealloc

[_numberArray release];

好吧现在接下来就是在init中创建一个数组

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

[self.numberArray addObject:[NSNumber numberWithDouble:0]];