2012-02-22 43 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 =零;」似乎它並不真正從堆棧中刪除對象,它只是模仿。所以我增加了一個功能,該CalculatorModel「大腦」:

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

有人可以向我解釋調用該方法的正確方法/我做錯了什麼嗎?

+0

您是否也將聲明添加到大腦的.h文件中? – rooftop 2012-02-22 02:40:45

+0

_does似乎不想工作_ - 你有編譯錯誤?運行時錯誤?它有什麼作用?你期望它做什麼? – sarnold 2012-02-22 03:02:16

+0

屋頂,你是對的。我沒有在.h文件中添加聲明。我猜如果你把它添加到實現文件中,而不是它被認爲是一個私有函數的接口?謝謝您的幫助! – Joey 2012-02-22 04:21:14

回答

1

這裏是作爲問題答案的另一個線程的鏈接。

CS193P - Adding cancel button to iOS calculator

讓我們看看我是否能解釋爲什麼self.model =零;

我打算在模型中使用一張紙的類比。在本文中,您可以編寫您的堆棧,以及您的模型可能知道的其他任何內容。

假設你懶惰地爲模型實例化了你的getter(就像指導者那樣); 當你打電話給self.model時,如果你已經有一張有你的模型的紙張,它會給你,如果你沒有爲你的模型一張紙,它會抓住一張空白的紙,使它你的模型。

現在當你說self.model = nil;你告訴它扔掉你的模型紙。這意味着您現在有更長的堆棧或模型中的其他任何東西。

現在,當getter被懶惰地實例化時,當你下一次請求你的模型時,它還沒有一個,所以它會爲你製作一個全新的模型。

所以也許快速總結self.model =零;不會清空你的堆棧,它完全拋出堆棧,你沒有一個空的堆棧,你沒有堆棧。

而您的clearOperandsStack,只是清空堆棧,以便您有一個空的堆棧。

+0

謝謝你的明確解釋@Joe_Schmoe。有沒有什麼比較好的慣例?扔掉堆棧或清除它? – Joey 2012-02-26 01:37:34

相關問題