我最近开始在iTunes U上关注斯坦福大学的iPhone开发在线课程。
我正在尝试为前几个讲座做家庭作业。我跟着我构建了一个基本计算器的演练,但现在我正在尝试第一个任务,我似乎无法解决它。这是一个:
添加一个“C”按钮,清除所有内容(例如,View中的显示,模型中的操作数堆栈,控制器中维护的任何状态等)。确保3 7 C 5结果在显示屏中显示5。您必须向模型添加API才能支持此功能。
我需要添加哪些API?
我试过这样的事情:
- (IBAction)CancelPressed {
self.Display.text = 0;
}
我知道这是错的。我需要一些指导。在此先感谢..如果问题是愚蠢的,请抱歉..
答案 0 :(得分: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
}
答案 1 :(得分:2)
我也将在iTunesU上浏览2011年秋季版。这是我完成这个的方式。
- (IBAction)clearPressed {
self.display.text = @"0";
self.userIsInTheMiddleOfEnteringANumber = NO;
self.brain = nil;
}
唯一的问题是我实际上没有为我的模型添加API。因为控制器有一个CalculatorBrain实例变量,我只是把它扔出去,而且由于我们懒得实例化我们的大脑吸气剂,下次我打电话给吸气剂时,我会得到一个全新的(已经清除)。
答案 2 :(得分:1)
您基本上想要重置所有变量。假设您正在使用UILabel,它将采用NSString,因此您可以更好地使用:
self.display.text = @"0";
然后浏览您拥有的所有其他属性和实例变量,然后设置为默认值。 任何对象都希望设置为nil。所以,如果你存储任何字符串,例如。你保持的任何数字,设置为0.或者如果它们是浮点数,则为0.0f。
不确定这个计算器的例子是什么,但希望这会让你朝着正确的方向前进。
如果没有,您需要更多帮助,请随时告诉我:)
答案 3 :(得分:1)
你也应该清理堆栈:
- (IBAction)clearPressed {
double result = [self.brain performOperation:@"C"];
}
并在performOperation中添加:
else if ([operation isEqualToString:@"C"])
{
[self.operandStack removeAllObjects];
result = 0;
}
答案 4 :(得分:0)
我认为cancelPressed会像这样:
- (IBAction)CancelPressed:(id)sender {
double result = [self.brain performOperation:@"C"];
NSString *resultString = [NSString stringWithFormat:@"%g",result];
self.Display.text = resultString;
}
答案 5 :(得分:0)
你的CancelPressed:看起来不错。
请注意,您可以删除通话中的(id)发件人。您不知道哪个按钮发送了消息。
你可以做(只是更短):
self.Display.text = @"";