2010-04-26 72 views
1

只是試圖創建一個簡單的方法,當按鈕按下時,計數器上的計數爲1。我的知識是極其有限的,我敢肯定,我的問題是在方法實現的地方:簡單的iPhone tally方法問題

-(IBAction) updateTally:(id) sender { 
    NSString *text; 
    int total = 0; 
    total = total + 1; 
    text=[[NSString alloc] initWithFormat: @"%i", total]; 
    lblTally.text = text; 
} 

我已經做了必要的接口聲明的lblTally的UILabel和updateTally方法。我懷疑有一種NSString/int /%i /%@混合,我正在做,但我不知道如何解決它。當我運行該程序時,它會在iphone上的lblTally標籤字段中顯示0。當我按下按鈕時,它會在該字段中顯示1。但是,如果我繼續按下按鈕 - 什麼也沒有發生,它只是一個1.當我不斷地按下按鈕時,我該如何計算它?

回答

2

的問題是,你在每個updateTally總重新初始化。您需要將計數器存儲在成員變量中,或者從字符串中提取現有計數器,更新它,然後將其寫回字符串。

 
- (IBAction) updateTally:(id) sender 
{ 
    int oldtally = [lblTally.text integerValue]; 
    int newtally = oldtally + 1; 
    lblTally.text = [NSString stringWithFormat:"%d",newtally]; 
} 

我還要指出的是,當前的代碼有內存泄漏(你調用分配/初始化,但你必須分配結果到lblTally.text變量之後你不調用釋放)。您應該在lblTally.text = text之後調用[text release],或者像上面我使用的那樣使用stringWithFormat,它使用autorelease,這樣字符串不需要被顯式釋放(因爲它會被自動釋放)。

+0

這個工程,非常感謝你的幫助。不幸的是,我不明白它爲什麼起作用。爲什麼第一行不會像「int oldtally = lblTally.text」那樣工作? – startuprob 2010-04-26 05:33:55

+0

原因「int oldtally = lblTally.text」不起作用,是因爲lblTally.text是一個字符串。您需要通過調用其「integerValue」方法將其轉換爲整數,該方法報告字符串表示的整數(假設該字符串實際上表示一個整數 - 如果不是,則會得到錯誤)。 – 2010-04-26 05:43:47

1

每次運行方法時,您都會重新初始化總變量。

int total = 0; 

移動比方法外的代碼行。我不這樣做蘋果的發展,但它會是這樣的:

int total = 0; 
-(IBAction) updateTally:(id) sender { 
    NSString *text; 
    total = total + 1; 
    text=[[NSString alloc] initWithFormat: @"%i", total]; 
    lblTally.text = text; 
} 
+0

@geoff,總共應該是他班上的成員;不是全局變量。 – 2010-04-26 03:59:58

+0

@邁克爾 - 你是對的,但重點是聲明需要超出他的方法......我編輯了我的答案。 – 2010-04-26 04:33:23