0

電卓アプリを作っているのですが、2つのメモリ機能ボタン
(「メモリに追加」または「記憶」と「記憶を表示」または「伝える」)を作りたいです。

メインラベルの現在の値を取得する方法は次のとおりです。

double currentValue = [screenLabel.text doubleValue];    

基本的に、私が作ることを可能にするある種のメモリキャッシュをどのように取得できますか?

  • キャッシュの特別なメモリをクリアし、ラベルを読み取り、必要な限り保存しますが、永続的ではない最初のボタン

  • キャッシュから保存された値を読み取って表示する、または値が保存されていない場合は0を表示する2番目のボタン

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-mcmrNSNumber

多分私はあなたの質問を理解していません。


I have to confess that I was more worried by your line of code where you're getting your currentValue from screenLabel.text. You really do not want to retrieve data that is intrinsic to the operation of your app from a user-interface control like a UILabel, which is solely designed for the presentation of information. This implies a fundamental confusion about how MVC, or Model-View-Controller, apps are designed. The values that drive the calculations (e.g. the current value, the memory value, etc.) are part of the model (possibly stored as properties of some model object). The UILabel that presents the currently calculated value, is part of the view.

It's not a good idea to use the UILabel (part of the view) to drive calculations. Your app should be maintaining a model for the app's data/operations, and the view should just be a presentation of that model (not the other way around).

電卓アプリは、ここでの実際的な考慮事項のすばらしい例です。たとえば、電卓に「科学/指数表記モード」がある場合があります(1,200,000,000は「1.2e9」と表示される場合があります)。または、1000の区切り文字としてコンマを使用して数値を表示している可能性があります(100万は「1,000,000.00」と表示されます)。textのプロパティのフォーマットは、さまざまな要因によって決まる可能性があります。計算目的で値をUILabel使用する場合は、文字列のフォーマットについて心配する必要はありません。double

もう1つの優れた例は、表示される桁数が、アプリが横向き(小数点以下の桁数が多いスペースがある)か縦向き(スペースが少ないため、表示される小数点以下の桁数が少ない)かどうかの関数です。縦向きの画面に表示するスペースが少なかったという理由だけで、アプリが記憶する桁数が少なくなることはありません。ビューのユーザーインターフェイスが変更されても、基になるモデルの実際の計算値は変更されません。そして、それにもかかわらず、モデルはおそらく、ユーザーインターフェイスに表示したいより多くの「有効数字」を常に使用します。

しかし、うまくいけば、これらの例は、アプリのモデルビューの違いを理解するのに役立ちます。つまり、から値を取得するのは賢明ではありませんUILabelsアプリのモデルに実際の値(しゃれは意図されていません)を保持します。

于 2012-11-27T04:06:50.577 に答える
1

あなたの問題が実際に何であるかをまだ推測しているので、ここにあなたが尋ねたように見えるものへの答えがあります...

電卓にはおそらく加算ボタ​​ンがあり、加算には2つのオペランドが必要です。あなたの質問は、それらの1つがscreenLabelテキストおよびcurrentValue数値として保存されていることを示しています。もう1つはどこですか?記憶した値を、2番目の値を格納するのと同じオブジェクトの変数に格納します。

たとえば、次のようなものがあります。

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

...

@end
于 2012-11-27T00:21:49.197 に答える
1

NSMutableDictionaryを使用して、最初のボタンでObjectForKeyを設定し、他のボタンでObjectForKeyを削除します。

このディクショナリの1つのインスタンスを使用してシングルトンクラスを設定し、他のクラスで使用できるようにすることもできます。構造によって異なります。

于 2012-11-27T00:56:42.050 に答える