-1

質問 1: ポインターの代わりに、変更される値 (この場合は self.display.text) の永続的なコピーをインスタンス変数に作成させるにはどうすればよいですか?

質問 2: 私が問題を述べた方法において、私の用語は正しいですか?

Obj-c を使い始めて数週間になりますが、この問題に遭遇しました。問題の一部は、正しい用語を知らないことにあると思います (そのため、解決策を探すのが難しい)。だからここに行く:

This is a basic calculator program:
    1)User inputs their first number
    2)User presses an action (+, -, *, /)
    2a) first inputted number is saved; display is reset
    3)User inputs second number
    4)User presses enter
    4a) second inputed number is saved; action is performed on the first and second number

This declares my CalculatorViewController.h

@interface CalculatorViewController : UIViewController
@property double firstNumber, secondNumber, result;
@property int actionType;
@property (weak, nonatomic) IBOutlet UILabel *display;
@property BOOL userIsInTheMiddleOfEnteringANumber;
@end



Implementation here...
// method for when someone clicks an action item on the calculator (such as +, -, *, /)
- (IBAction)pressedAction:(UIButton *)sender {

self.firstNumber = [self.display.text doubleValue];

(action type is set here)

NSLog(@"Action Type: %i", self.actionType);
NSLog(@"FN: %f, SN: %f", self.firstNumber, self.secondNumber);

}

// method for when someone clicks enter (and therefore firstNumber and secondNumber are set
- (IBAction)pressedEnter {
self.secondNumber = [self.display.text doubleValue];

NSLog(@"f: %f, s: %f", self.firstNumber, self.secondNumber);
// should do the given action to the self.firstNumber, self.secondNumber here

}

ここに私の問題があります: firstNumber は、割り当て時の永続的なコピーではなく、self.display.text (画面上のラベル/出力) へのポインター (用語?) として設定されています。したがって、誰かがプラスをクリックした後に数字が変わると、より多くの数字が入力されているため、firstNumber が変更されています。

助けてくれてありがとう!ほんとうにありがとう!

4

2 に答える 2

1

ここに私の問題があります: firstNumber は、割り当て時の永続的なコピーではなく、self.display.text (画面上のラベル/出力) へのポインター (用語?) として設定されています。

それは真実ではありません。firstNumberでありdouble、ポインターではありません。self.display.text後で変更しても、変更されfirstNumberません。

これをコードでテストして、自分の目で確かめることができます。

self.display.text = @"1.0";
self.firstNumber = [self.display.text doubleValue];
self.display.text = @"2.0";
NSLog(@"firstNumber is: %g", self.firstNumber);

self.display.text変更後もself.firstNumber変わらないことがわかります。

だから、あなたの問題は別の場所にあります。おそらく、あなたの-pressedAction:メソッドは、あなたが思っているよりも頻繁に呼び出されていますか? iOS では、ボタンが押されたときに複数のアクションを送信できる可能性があります。おそらく、送信中のボタンをコピー アンド ペーストし、-pressedAction:後でそのボタンに別のアクションを追加した可能性があります。

于 2012-06-11T01:23:16.900 に答える
0

あなたが説明している問題は、コードで示したものと実際には一致しません。firstNumberdouble として宣言しました:

@property double firstNumber;

...これは double (またはその他のもの) へのポインターではありません。それに値を割り当てると、新しい値を明示的に割り当てるまで、割り当てられた値は再び変更されません(手動でポインタを作成し、ポインタを使用して間接的に値を変更するなどのfirstNumberことをしていないと仮定します)firstNumber)。

さらに、次のようにして値を割り当ててfirstNumberいます。

self.firstNumber = [self.display.text doubleValue];

文字列を呼び出すdoubleValueと、現在の文字列値が解析され、double として返されます。戻り値は、文字列とはまったく結合されず、文字列のテキストが変更されても変更されません。

したがって、問題はコードの別の場所にあります。IBActionマッピングの設定方法に問題がある可能性があります。プロパティfirstNumberは、希望する動作に対して正しく設定されており、コードはそれを正しく使用しているように見えます。

これ以上コンテキストがなければ、私ができる唯一の提案は、ブレークポイントを設定して、pressedAction:複数回呼び出されないようにすることです。これは、コード例で の値がfirstNumber変化する唯一の場所です。

于 2012-06-11T01:31:45.060 に答える