CS193P作业1清除

时间:2012-02-22 02:34:46

标签: objective-c xcode cs193p

我刚开始使用斯坦福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“brain”中添加了一个函数:

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

并希望在我的“clearPressed”函数中调用它在CalculatorViewController中,但我可能有问题,因为我还没有完全理解目标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
}

有人可以向我解释一下调用该方法/我做错了什么的正确方法吗?

2 个答案:

答案 0 :(得分:1)

这是另一个回答问题的线程的链接。

CS193P - Adding cancel button to iOS calculator

让我们看看我能解释为什么self.model = nil;

我将使用一张纸的类比为您的模型。在本文中,您可以编写堆栈,以及模型可能知道的任何其他内容。

假设您懒惰地为模型实例化了你的getter(就像讲师一样); 当你打电话给self.model时,如果你已经有一张纸上有你的模型,那么它会给你,如果你的模型没有一张纸,它会抓住一张白纸然后把它弄成你的模型。

现在当你说self.model = nil;你告诉它扔掉你的模型纸。这意味着您现在可以更长时间地拥有堆栈,或模型中的任何其他内容。

现在,当getter被懒惰地实例化时,当你下次要求你的模型时它还没有,所以它会为你制作一个全新的模型。

所以也许快速摘要是self.model = nil;不会清空堆栈,它会完全抛弃堆栈,没有空堆栈,没有堆栈。

而你的clearOperandsStack只是清空堆栈,所以你有一个空堆栈。

答案 1 :(得分:0)

我的作业1解决方案:https://github.com/rl1987/CS193p-Homework-1