2012-06-11 39 views
-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(也就是屏幕上的標籤/輸出),而不是作爲一個永久的在作業時複製。因此,當某人點擊加號後數字發生變化時,由於輸入的號碼越來越多,第一個號碼正在改變。

感謝您的幫助!對此,我真的非常感激!

回答

1

這是我的問題:firstNumber被設置爲指向self.display.text(它是屏幕上的標籤/輸出)的指針(術語?),而不是作業時的永久副本。

這不可能是真的。 firstNumberdouble,不是指針。如果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:的按鈕,然後再向該按鈕添加另一個動作。

+0

你是百分之百正確的......我有一大堆線條被註釋掉了,而且我在其中一行中意外地重新聲明瞭firstNumber。感謝你們對我的幫助;對此,我真的非常感激!! – user1390560

0

您描述的問題與您在代碼中顯示的內容不匹配。你聲明firstNumber爲雙:

@property double firstNumber; 

...它不是一個指針,雙(或其他任何東西)。當你給它賦值時,除非/直到你明確地給firstNumber指定一個新值(假設你沒有做過像手動創建指向firstNumber的指針,然後使用指針間接改變價值)。

而且,你這樣做值分配給firstNumber

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

當你調用的字符串doubleValue,當前字符串值將被解析並返回一個double。返回的值沒有以任何方式與字符串耦合,並且如果字符串的文本更改,則不會被修改。

所以這個問題是在你的代碼中的其他地方。這可能與您設置IBAction映射的方式有關。您的firstNumber屬性針對您所說的行爲正確設置,並且您的代碼似乎正確使用它。

沒有更多的上下文,我可以做的唯一建議是在pressedAction:中設置一個斷點以確保它不被多次調用。這是示例代碼中firstNumber值發生更改的唯一地方,因此這是顯而易見的地方。

相關問題