質問
スタンフォードIOS5クラスを始めて、RPN計算機を完了しましたが、「クリア」ボタンを少し異なるように作りたいです。これは私が今持っている方法で、CalculatorModel "Brain":を変更しません。
- (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 "Brain"に関数を追加しました:
-(void) clearOperandStack
{
[self.operandStack removeAllObjects];
}
.
CalculatorViewControllerの「Clearpressed」機能でそれを呼び出したいが、私はまだ客観的な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
}
.
誰かが私にその方法を呼び出すための適切な方法/私が間違っていることを呼び出すのに適切な方法を説明してください。
解決
課題1の私の解決策: https://github.com/rl1987/CS193p-Homework-1
他のヒント
ここに、質問に答える別のスレッドへのリンクがあります。
self.model= nil;の理由を説明できるかどうか見てみましょう。
モデルに1枚の紙の例えを使用します。このペーパーでは、スタックに加えて、モデルが知っている可能性のあるその他の事項を記述できます。
モデルのゲッターを(インストラクターが行ったように)怠惰にインスタンス化したと仮定します。 self.modelを呼び出すと、モデルが含まれている用紙が既にある場合は、モデル用の用紙がない場合は、空白の用紙を取得して、モデル。
ここで、self.model= nilと言うと;モデルの紙を捨てるように言っています。これは、スタック、またはモデルにある追加のものがなくなったことを意味します。
ゲッターが遅延インスタンス化されるようになったので、次にモデルを要求したときにモデルがまだないので、まったく新しいモデルになります。
つまり、簡単な要約はself.model= nilです。スタックを空にしません。スタックを完全に破棄します。空のスタックはありません。スタックはありません。
clearOperandsStackはスタックを空にするだけなので、スタックは空になります。