2012-05-05 13 views
0

私は簡単な電卓のiPhoneアプリケーションを開発しています。ちょうど練習目的のために。私はユーザーが入力した数字を格納するIBActionメソッドを持っています。全体的なコンセプトは、計算アプリケーションは、ユーザーが複数のアクションを実行することができるように保留中の作業を積み重ねることです。画面には次のような結果が表示されます:1 + 2 - 4 + 10 = X。NSMumberを格納する2つのNSMutableArrayと、オペレータの行動。ユーザーが演算子ボタンをクリックすると、新しい番号に対して作成された新しい配列要素が表示されます。ユーザが数字を入力すると、オペレータボタンが押されるまで、最後の配列要素が更新されます。NSNumberは正しい数値の代わりにゼロの値を格納します

問題は、すべての配列要素がゼロであることです。メソッドの中には、私が設定したときにそれが格納されていますが、メソッドが実行され、再び呼び出されたときに、入力された数値の代わりに0だけが引き継がれます。する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メソッドが自動的に各ボタンを押した後に呼び出されていることが判明しました。値0を設定します。この記事の下の完全なソースコードをコメントセクションにリンクしました。唯一の問題は、なぜこのメソッドが呼び出されたかです。このメソッドを呼び出すのは何ですか?

UPDATE2:with the Saad's help私はこの問題を解決することができました。みんなありがとう!

+0

「numbers」はどこに作成しますか? 'numbers'にアクセス(特に変更)する他のコードはありますか?もしそうなら、投稿してください。 –

+0

私はデフォルトのViewControllerでそれを作成し、そのデフォルト値をviewDidLoadメソッドに設定しました。数字を変更する方法は他にありません。ここには完全なインターフェースと実装コードがあります。それは現時点では不完全であることに注意してください。 –

+0

http://pastebin.com/tprwsd14とhttp://pastebin.com/yb5YtAhE –

答えて

0

OK]をクリックしてそれを得た:)、ここ

一つのことは、私はタグがゼロよりも立ち上がることがないと思い、クリック桁方法でbraekpointするかのNSLogのいずれかによって、あなたの送信者のタグを最初にチェックすることであるので、最後のオブジェクト配列内のオブジェクトを追加するすべての場所にnslogまたはブレークポイントを配置します。

in interface。 dealloc

[_numberArray release]; 

OKで

@property(nonatomic, retain) NSMutableArray* numberArray; 
実装で

@synthesize numberArray = _numberArray; 

今次のことは

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

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

私はそれをブレークポイントとNSLog呼び出しでテストしました。それには象徴数字が含まれています。私はその理由がHot Licksが言ったように、何とかオブジェクトが破壊されたり、 "数字"の作成が間違っているかもしれないと思う。ただし、配列には数値が含まれているため、オブジェクトは存在しますが、すべての値はゼロです。ここでも、sender.tagは正しい値を返します。それをNSMutableArrayに追加すると、それはcorrent値を示します。しかし、このメソッドが再び呼び出されると、その数はゼロになります。 –

+0

akha、あなたは礼儀正しく、あなたの配列のメモリは適切に割り当てられていません。私は答えを編集しています。最後に編集コードを使用して、解決策が見つかったら教えてください。 – Saad

+0

彼はviewDidLoad()の配列を割り当てます(編集:とinit!)。 – thundersteele

1

唯一可能な方法であるのinitで配列を作ることですこの問題が発生する場合はsender.tag == 0いつも。だからあなたは間違いなくそれをチェックすべきです。私のここでのポイントは、これらの症状を引き起こす可能性のある他のシナリオがないことです。

+0

私はブレークポイントとNSLog呼び出しでそれをテストしました。それには象徴数字が含まれています。私はその理由がHot Licksが言ったように、何とかオブジェクトが破壊されたり、 "数字"の作成が間違っているかもしれないと思う。ただし、配列には数値が含まれているため、オブジェクトは存在しますが、すべての値はゼロです。ここでも、sender.tagは正しい値を返します。それをNSMutableArrayに追加すると、それはcorrent値を示します。しかし、このメソッドが再び呼び出されると、その数はゼロになります。 –

関連する問題