为计算器应用程序制作记忆功能按钮

时间:2012-11-26 22:39:03

标签: objective-c ios calculator

我正在制作一个计算器应用程序,并希望制作两个记忆功能按钮
 (“添加到记忆”或“记住”和“显示记住的”或“告诉”)

我获取主标签上当前值的方式是

double currentValue = [screenLabel.text doubleValue];    

基本上,我怎么能得到一些允许我制作

的内存缓存
  • 清除缓存特殊内存的第一个按钮,读取标签并在需要时存储它,但不是永久存储

  • 第二个按钮,从缓存中读取存储的值并显示它,或者在没有存储值的情况下显示0

4 个答案:

答案 0 :(得分:2)

模型中的堆栈数据对象可以将值保留在内存中。

查看此类别: http://saturnboy.com/2011/02/stack-queue-nsmutablearray/

答案 1 :(得分:2)

正如其他人所建议的那样,您需要一些模型结构(例如某些类属性)来跟踪您在计算中的位置。但是如果你需要跟踪计算器的内存寄存器,你可能会拥有如下属性:

@property (nonatomic) double memoryValue;

所以你只需要拿走那个属性,例如memoryValue,并添加到其中,从中减去,清除它(将其设置为零)或检索其值,具体取决于用户是否点击 m + m- mc mr 。我个人甚至会考虑NSNumber财产,但我认为你不需要去那里。

也许我不理解你的问题。


我必须承认,您从currentValue获取screenLabel.text的代码行更加担心。你真的希望从像UILabel这样的用户界面控件中检索应用程序操作所固有的数据,而model仅用于显示信息。这意味着对MVC或Model-View-Controller应用程序的设计方式存在根本混淆。驱动计算的值(例如当前值,内存值等)是模型的一部分(可能存储为某些UILabel对象的属性)。显示当前计算值的UILabel视图的一部分。

使用text视图的一部分)来推动计算并不是一个好主意。您的应用应该为应用的数据/操作维护模型视图应该只是该模型的表示(而不是其他方式)。

计算器应用程序是这里实际考虑的一个很好的例子。例如,您的计算器可能具有“科学/指数表示法模式”(其中1,200,000,000可能显示为“1.2e9”)。或者它可能显示数字值,逗号为千位分隔符(其中一百万显示为“1,000,000.00”)。 UILabel double属性的格式可以由各种不同的因素驱动,当您使用UILabels值进行计算时,您真的不应该担心字符串格式

另一个很好的例子是显示的数字是应用程序是否处于横向(我们有多个小数位的空间)与纵向方向(较小的空间,因此显示较少的小数位)的函数。该应用程序不应该记住更少的数字只是因为在纵向屏幕上显示它们的空间较少。随着视图的用户界面发生更改,底层模型中的实际计算值不应更改。而且,无论如何,模型可能总是使用您希望在用户界面中呈现的更多“有效数字”。

但希望这些示例能够将您应用的模型视图区分开来。简而言之,从{{1}}检索值并不谨慎。在应用的模型中保留真实值(无双关语)。

答案 2 :(得分:1)

仍在猜测你的问题到底是什么,这里是你似乎问过的问题的答案......

您的计算器可能有一个添加按钮,并且需要两个操作数。您的问题表明其中一个存储在screenLabel中作为文本,currentValue作为数字存储。另一个在哪里?将存储的值存储在存储第二个值的同一对象中的变量中。

E.g。你会有这样的事情:

@implementation MyCalculator
{
   double currentValue;
   double previousValue;
   double memoryValue;
   ...
}

...

@end

答案 3 :(得分:1)

使用NSMutableDictionary,其中第一个按钮是setObjectForKey,另一个按钮是removeObjectForKey。

您还可以使用此字典的一个实例设置单个类,以使其可供其他类使用。取决于你的结构。