0

シンプルな電卓iPhoneアプリを開発しています。あくまでも練習目的です。ユーザーが入力した数字を格納する IBAction メソッドがあります。全体の概念は、電卓アプリが保留中の操作を積み上げて、ユーザーが複数のアクションを実行できるようにすることであり、画面には次のように結果が表示されます: 1 + 2 - 4 + 10 = X.オペレーターのアクション。ユーザーが演算子ボタンをクリックすると、新しい番号に対して新しい配列要素が作成されます。ユーザーが数字を入力すると、オペレーター ボタンが押されるまで、最後の配列要素が更新されます。

問題は、すべての配列要素がゼロであることです。メソッド内では、設定時に正しい値が保存されますが、メソッドが実行されて再度呼び出されると、入力された数値の代わりにゼロだけが続きます。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 : The Saad の助けを借りて、この問題を解決することができました。みんなありがとう!:)

4

2 に答える 2

1

この問題が発生する唯一の方法は、sender.tag == 0常に場合です。ですから、必ず確認する必要があります。ここでのポイントは、これらの症状を引き起こす可能性のあるシナリオは他にないということです。

于 2012-05-05T21:47:08.160 に答える
0

はい、わかった、

ここでの 1 つのことは、最初に送信者のタグを確認することです。ブレークポイントまたはクリック ディジット メソッドの 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 に答える