2012-02-22 11 views
0

私はスタンフォードiOS5クラスを開始し、RPN電卓を完成させましたが、 "クリア"ボタンを少し違ったものにしたいと思っています。これは私がCalculatorModel「脳」を変更せずに、今それを持っているかである:CS193P割り当て1クリア

- (IBAction)clearPressed 
{ 
    self.display.text = @"";      // Clear the display 
    self.historyWindow.text = @"";     // Clear the history window 
    self.model = nil;        // Reset the stack 
    self.userIsInMiddleOfEnteringNumber = NO;  // Reset user typing boolean 
} 

私は、間違っているかもしれませんが、「self.model = nilを;」実際にはスタックからオブジェクトを削除しないようですが、それはちょうどそれを模倣するものです。

-(void) clearOperandStack 
{ 
    [self.operandStack removeAllObjects]; 
} 

をしてCalculatorViewControllerで私の「clearPressed」機能でそれを呼びたいが、私はまだ完全にはObjective Cのを理解していないので、私は可能性の問題が生じています:だから私はCalculatorModel「脳」に機能を追加しました。これは私がやらなければならないと思ったものですが、仕事をしたくないようです。

- (IBAction)clearPressed 
{ 
    self.display.text = @"";      // Clear the display 
    self.historyWindow.text = @"";     // Clear the history window 
// self.model = nil;        // Reset the stack 
    [self.model clearOperandStack]; 
    self.userIsInMiddleOfEnteringNumber = NO;  // Reset user typing boolean 
} 

誰かが私に間違ってやっている方法を呼び出す正しい方法を教えてもらえますか?譲渡1の

+0

宣言を脳の.hファイルにも追加しましたか? – rooftop

+0

_作業したくないようです - コンパイルエラーが発生しますか?ランタイムエラー?それは何をするためのものか?あなたは何をすると思いましたか? – sarnold

+0

屋上、あなたは正しかった。私は.hファイルに宣言を追加しませんでした。私はあなたがそれを実装ファイルに追加し、私的関数と見なされるインターフェースではないと思いますか?助けてくれてありがとう! – Joey

答えて

1

は、質問に答える別のスレッドへのリンクです。

CS193P - Adding cancel button to iOS calculator

私はなぜself.model = nilを説明できるかどうかを確認できます。

あなたのモデルには紙の類推を使用します。このペーパーでは、あなたのスタックと、あなたのモデルが知っているかもしれない追加のものを書くことができます。

(インストラクターのように)モデルのゲッターをゆっくりとインスタンス化すると仮定します。 self.modelを呼び出すと、すでにモデルを持っている紙があれば、それはあなたに与えられます。あなたのモデル用の紙を持っていなければ、それは空白の紙片をつかんであなたのモデル。

ここで、self.model = nil;モデル紙を捨てるように指示しています。これは、モデル内のスタックやその他のものが長くなったことを意味します。

ゲッターが遅れてインスタンス化されているので、次回にモデルを尋ねるときにゲッターがまだ存在しないので、新しいモデルが作成されます。

したがって、簡単な要約はself.model = nilです。あなたのスタックを空にしない、それは完全にスタックをスローする、あなたは空のスタックを持っていない、あなたはスタックがありません。

clearOperandsStackはスタックを空にして空のスタックを作成します。

+0

@Joe_Schmoeの明確な説明をありがとう。よりよい習慣があるという条約はありますか?スタックを捨てたり、それをクリアするには? – Joey