2012-05-05 34 views
0

我開發了一個簡單的計算器iPhone應用程序。只是爲了練習的目的。我有一個IBAction方法來存儲用戶輸入的數字。整個概念是,計算器應用程序堆積等待審查,所以用戶可以執行多個操作,屏幕以下列方式顯示結果:1 + 2 - 4 + 10 = X.所以我有兩個NSMutableArray存儲NSNumber數字和操作員操作。當用戶點擊一個操作符按鈕時,爲新的編號創建一個新的數組元素。當用戶輸入數字時,最後一個數組元素會自行更新,直到按下操作員按鈕。NSNumber存儲零值而不是正確的數值

問題是每個數組元素都是零。在方法內部,當我設置它時,它存儲corrent值,但是當方法被執行並再次調用時,它只包含零而不是輸入的數字。該NSNumber的對象都存在,該數組包含每一個數字,但每一個數字是0。

這裏是方法:

// Processing digit buttons 
- (IBAction)clickDigit: (UIButton *) sender { 

    double currentNumber = [[numbers lastObject] doubleValue]; 

    // Get the digit 
    double digit = sender.tag; 

    // Do nothing when the currentNumber and the digit both zero 
    if(currentNumber == 0 && digit == 0) { 
     return; 
    } 

    // When currentNumber is zero, override the value 
    if(currentNumber == 0) { 

     currentNumber = digit; 

     [numbers removeLastObject]; 
     [numbers addObject: [NSNumber numberWithDouble: currentNumber ]]; 

    // Else, add the digit to currentNumber 
    } else { 

     currentNumber = currentNumber * 10 + digit; 

     [numbers removeLastObject]; 
     [numbers addObject: [NSNumber numberWithDouble: currentNumber ]]; 
    } 

    // Update the screen 
    [self updateDisplay]; 
} 

我不知道什麼是錯的。有什麼建議麼? 在此先感謝

更新:事實證明,每次按下按鈕後自動調用clickClear方法。它將值設置爲零。我在評論部分鏈接了這篇文章下面的完整源代碼。唯一的問題是:爲什麼要調用這個方法?什麼叫這個方法?

UPDATE2:與薩阿德的幫助我設法解決這個問題。謝謝大家! :)

+0

你在哪裏創建'數字'?有沒有其他代碼可以訪問(特別是修改)'數字'?如果是這樣,請發佈。 –

+0

我在默認的ViewController中創建了它,並在viewDidLoad方法中設置了它的默認值。沒有其他方法可以修改數字。這裏是完整的接口和實現代碼。請注意,目前尚不完善。 –

+0

http://pastebin.com/tprwsd14和http://pastebin.com/yb5YtAhE –

回答

0

確定了它,

一件事這裏是先檢查你的發件人的標籤,無論是braekpoint或通過的NSLog中點擊數字的方法,我想標籤永遠大於零起來,因此最後一個對象在數組中將始終爲零,進一步,將所有將對象添加到數組的地方的nslog或斷點。

in interface。

@property(nonatomic, retain) NSMutableArray* numberArray; 
實施

@synthesize numberArray = _numberArray; 

中的dealloc

[_numberArray release]; 

確定現在接下來的事情就是讓一個數組初始化是

NSMutableArray* arr = [NSMutableArray alloc] init]; 
self.numberArray = arr; 
[arr release]; 

[self.numberArray addObject:[NSNumber numberWithDouble:0]]; 
+0

我用斷點和NSLog調用測試了它。它包含corrent數字。我認爲其原因可能與Hot Licks所說的類似,不知何故對象遭到了毀壞,或者可能是「數字」創作是錯誤的。但是,數組包含數字,所以對象存在,但所有值都爲零。同樣,sender.tag返回正確的值。當我將它添加到NSMutableArray時,它顯示了corrent值。但是當再次調用這個方法時,這個數字變成零。 –

+0

akha,你是儀式,你的數組內存不是按順序分配的。我編輯答案,最後使用編輯代碼,並告訴我,如果你找到任何解決方案 – Saad

+0

他確實分配(編輯:和初始化!)viewDidLoad(),這應該是罰款。 – thundersteele

1

唯一可能的途徑你得到這個問題就是如果sender.tag == 0所有的時間。所以你一定要檢查一下。我的觀點是,沒有其他可能產生這些症狀的情況,所以必須這樣做。

+0

我用斷點和NSLog調用測試了它。它包含corrent數字。我認爲其原因可能與Hot Licks所說的類似,不知何故對象遭到了毀壞,或者可能是「數字」創作是錯誤的。但是,數組包含數字,所以對象存在,但所有值都爲零。同樣,sender.tag返回正確的值。當我將它添加到NSMutableArray時,它顯示了corrent值。但是當再次調用這個方法時,這個數字變成零。 –

相關問題