-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 (这是屏幕上的标签/输出)的指针(术语?),而不是在分配时作为永久副本。因此,当有人点击加号后数字发生变化时,随着输入的数字越来越多,第一个数字也会发生变化。

谢谢您的帮助!对此,我真的非常感激!

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

您描述的问题与您在代码中显示的问题并不真正匹配。您已声明firstNumber为双精度:

@property double firstNumber;

...它不是指向双精度(或其他任何东西)的指针。当您为其分配一个值时,分配的值将不会再次更改,除非/直到您明确分配一个新值firstNumber(假设您没有做任何事情,例如手动创建指针firstNumber然后使用指针间接更改值)。

此外,您firstNumber通过以下方式分配值:

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

当您调用doubleValue字符串时,当前字符串值被解析并以双精度形式返回。返回值不会以任何方式与字符串耦合,并且不会在字符串文本发生变化时被修改。

所以问题出在代码中的其他地方。这可能与您设置IBAction映射的方式有关。您的firstNumber属性已针对您所说的行为正确设置,并且您的代码似乎正在正确使用它。

在没有更多上下文的情况下,我能提出的唯一建议是设置一个断点pressedAction:以确保它不会被多次调用。这是示例代码中唯一firstNumber改变值的地方,因此很明显可以从这里开始查找。

于 2012-06-11T01:31:45.060 回答