2

我最近开始在 iTunes U 上关注斯坦福大学关于 iPhone 开发的在线课程。

我现在正在为前几节课做家庭作业。我完成了构建基本计算器的演练,但现在我正在尝试第一个作业,但似乎无法解决。如下:

添加一个“C”按钮以清除所有内容(例如,视图中的显示、模型中的操作数堆栈、控制器中维护的任何状态等)。确保 3 7 C 5 导致 5 显示在显示屏中。您必须将 API 添加到您的模型以支持此功能。

我需要添加什么 API?

我试过这样的事情:

- (IBAction)CancelPressed {
    self.Display.text = 0;
}

我知道这是错误的。我需要一些指导。提前谢谢..对不起,如果这个问题很愚蠢..

4

6 回答 6

3

这是我的做法:

CalculatorViewController.m 中的代码:

//********************************************************
//
//This method is called when the user presses the Clear
//button (labeled "C").
//
//********************************************************

- (IBAction)clearPressed {
    self.historyDisplay.text = @"";         //Clear history label
    self.display.text = @"0";               //Reset calculator display label to 0
    _userIsInTheMiddleOfTypingANumber = NO; //Reset the user tracking feature
    [self.brain clearStack];                //Calls method to "clear" the stack

    //The following line may not be needed depended on your implementation of the
    //decimal button. You may need something for your decimal implementation.
    _userAlreadyEnteredDecimal = NO;        //Reset the decimal boolean 
}

然后在 CalculatorBrain.m 中:

//********************************************************
//
//"Clear" all values off of the stack.
//
//********************************************************
- (void)clearStack
{
    _operandStack = nil; //Deallocate instance of the stack
}
于 2012-08-10T21:58:46.113 回答
2

我也在 iTunesU 上浏览 2011 年秋季版本。这是我完成此操作的方式。

- (IBAction)clearPressed {
    self.display.text = @"0";
    self.userIsInTheMiddleOfEnteringANumber = NO;
    self.brain = nil;
}

唯一的事情是我实际上不必将 API 添加到我的模型中。因为控制器有一个 CalculatorBrain 实例变量,所以我只是把它扔掉了,因为我们懒惰地实例化了我们的大脑吸气剂,所以下次我调用吸气剂时我会得到一个全新的(已经清除)。

于 2012-02-03T16:07:49.053 回答
1

您基本上想要重置所有变量。假设您使用的是 UILabel,它将需要一个 NSString,因此您会更好:

self.display.text = @"0";

然后检查您拥有的所有其他属性和实例变量,然后设置为默认值。任何作为对象的东西都想设置为零。因此,例如,如果您要存储任何字符串。并且您保留的任何数字都设置为 0。如果它们是浮点数,则设置为 0.0f。

不确定这个计算器示例到底是什么,但希望这会让你朝着正确的方向前进。

如果没有,并且您需要更多帮助,请随时告诉我 :)

于 2012-01-29T00:51:33.540 回答
1

您还应该清除堆栈:

- (IBAction)clearPressed {
    double result = [self.brain performOperation:@"C"];
}

并在 performOperation: 添加:

else if ([operation isEqualToString:@"C"])
{
    [self.operandStack removeAllObjects];
    result = 0;
}
于 2012-01-30T15:49:44.603 回答
0

我认为 cancelPressed 应该是这样的:

- (IBAction)CancelPressed:(id)sender {

        double result = [self.brain performOperation:@"C"];
        NSString *resultString = [NSString stringWithFormat:@"%g",result];
        self.Display.text = resultString;

}
于 2012-02-01T20:29:56.567 回答
0

你的 CancelPressed: 看起来不错。

请注意,您可以删除呼叫中的 (id)sender。您不知道是哪个按钮发送了消息。

你可以这样做(有点短):

self.Display.text = @"";
于 2012-02-04T07:34:59.023 回答