0

スタンフォードiOS5クラスを開始し、RPN計算機を完了しましたが、[クリア]ボタンの動作を少し変えたいと思います。CalculatorModelの「頭脳」に変更を加えることなく、これが私が今持っている方法です。

- (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;」スタックからオブジェクトを実際に削除するわけではないようですが、それを模倣しているだけです。そこで、CalculatorModelの「頭脳」に関数を追加しました。

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

CalculatorViewControllerの「clearPressed」関数で呼び出したいのですが、Objective cをまだ完全に理解していないために、問題が発生している可能性があります。これは私がしなければならないと思ったのですが、うまくいきたくないようです。

- (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
}

誰かがそのメソッドを呼び出す適切な方法/私が間違っていることを私に説明できますか?

4

2 に答える 2

1

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

CS193P-iOS計算機にキャンセルボタンを追加

self.model=nil;の理由を説明できるかどうかを見てみましょう。

モデルに1枚の紙の例えを使用します。このペーパーでは、スタックに加えて、モデルが知っている可能性のある追加事項を記述できます。

モデルのゲッターを怠惰にインスタンス化したと仮定します(インストラクターが行ったように)。self.modelを呼び出すと、モデルが含まれている用紙が既にある場合は、モデル用の用紙がない場合は、白紙を取得して、モデル。

ここで、self.model=nilと言うと; モデルシートを捨てるように言っています。これは、スタック、またはモデルにある追加のもののいずれかが長くなったことを意味します。

ゲッターが遅延インスタンス化されたので、次にモデルを要求したときに、まだモデルがないので、まったく新しいモデルになります。

したがって、簡単な要約はself.model=nilです。スタックを空にしません。スタックを完全に破棄します。空のスタックはありません。スタックはありません。

clearOperandsStackはスタックを空にするだけなので、スタックは空になります。

于 2012-02-23T15:16:55.420 に答える
0

課題1の私の解決策:https ://github.com/rl1987/CS193p-Homework-1

于 2012-02-22T16:11:15.917 に答える