0

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

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

double currentValue = [screenLabel.text doubleValue];    

基本上,我怎么能得到某种内存缓存,让我

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

  • 从缓存中读取存储值并显示它的第二个按钮,如果没有存储值,则显示 0

?

4

4 回答 4

2

模型中的堆栈数据对象将能够将值保存在内存中。

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

于 2012-11-26T22:51:57.310 回答
2

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

@property (nonatomic) double memoryValue;

因此,您只需获取该属性,例如memoryValue,然后对其进行添加、减去、清除(将其设置为零)或检索其值,具体取决于用户分别点击m+m-mcmr。我个人什至会考虑NSNumber房产,但我认为你不需要去那里。

也许我不明白你的问题。


currentValue我不得不承认,我更担心你从哪里得到你的代码行screenLabel.text。您真的希望从用户界面控件(如 )中检索应用程序操作所固有的数据,该控件UILabel专为信息呈现而设计。这意味着对如何设计 MVC 或Model-View-Controller应用程序存在根本性的混淆。驱动计算的值(例如当前值、内存值等)是模型的一部分(可能存储为某个model对象的属性)。UILabel表示当前计算值的 是视图的一部分。

UILabel使用(视图的一部分)来驱动计算并不是一个好主意。您的应用程序应该为应用程序的数据/操作维护一个模型,并且视图应该只是该模型的表示(而不是相反)。

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

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

但希望这些示例能够让您了解应用程序模型视图之间的区别。简而言之,从UILabels. 在您的应用模型中保留真实值(不是双关语) 。

于 2012-11-27T04:06:50.577 回答
1

使用 NSMutableDictionary,您的第一个按钮将 setObjectForKey,另一个按钮将 removeObjectForKey。

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

于 2012-11-27T00:56:42.050 回答
1

仍在猜测您的问题到底是什么,这是您似乎所问的答案...

你的计算器大概有一个加法按钮,加法需要两个操作数。您的问题表明其中一个screenLabel以文本和currentValue数字形式存储。另一个在哪里?将记忆值存储在存储第二个值的同一对象中的变量中。

例如,你会有这样的东西:

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

...

@end
于 2012-11-27T00:21:49.197 回答