2010-04-26 3 views
1

Просто попробуйте создать простой метод, который подсчитывает 1 на подсчете при нажатии кнопки. Мои знания крайне ограничены, и я уверен, что моя проблема находится где-то в реализации методы:Простой вопрос о методе iPhone для iPhone

-(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 /% @ mixup, который я делаю, но я не уверен, как это исправить. Когда я запускаю программу, так как в настоящее время она отображает 0 в поле метки lblTally на iphone. Когда я нажимаю кнопку, тогда отображается 1 в этом поле. Однако, если я продолжаю нажимать кнопку - ничего не происходит, она просто остается 1. Как мне подсчитать, как я постоянно нажимаю кнопку снова и снова?

ответ

2

Проблема заключается в том, что вы переинициализации общей сложности в каждом updateTally. Вам нужно либо сохранить подсчет в переменной-члене, либо извлечь существующую сумму из строки, обновить ее, а затем записать обратно в строку.

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

Я хотел бы также отметить, что ваш текущий код имеет утечки памяти (вы вызываете Alloc/инициализации, но тогда вы не вызывают высвобождение после вы назначили результат переменной lblTally.text). Вы должны либо вызвать [text release] после lblTally.text = text, либо использовать stringWithFormat, как я использовал выше, который использует autorelease, так что строка не должна быть явно выпущена (так как она будет автоматически выпущена).

+0

Это работает, спасибо вам большое за помощь. К сожалению, я не понимаю, почему это работает. Почему первая строка не будет работать как «int oldtally = lblTally.text» ????? – startuprob

+0

Причина «int oldtally = lblTally.text» не будет работать, потому что lblTally.text - это строка. Вам нужно преобразовать его в целое число, вызывая его метод integerValue, который сообщает целое число, представленное строкой (если строка фактически представляет целое число - вы получите ошибку, если это не так). –

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, общее количество должно быть членом его класса; не глобальная переменная. –

+0

@ Майкл - Вы правы, но дело в том, что декларация должна быть вне его метода ... Я отредактировал свой ответ. –

Смежные вопросы