2012-02-27 3 views
2

Ниже приведен код, который я использую. Если я нажимаю addQuanity, то m_label будет отображать один вместо двух. Если я снова нажимаю addWuantity, m_label показывает 2. Нажмите минусQuantity, измените m_label на 3 вместо 2, но нажав minusQuanity, снова измените m_label на 2. Любые идеи о том, что я пропущу?counter ++/counter-- не работает как ожидалось

Спасибо, Райан

NSInteger counter = 1; 
-(IBAction) addQuantity 
{ 
if (counter > 9) 
    return; 
[m_label setText:[NSString stringWithFormat:@"%d",++counter]]; 
} 

-(IBAction) minusQuantity 
{ 
if (counter < 1) 
    return; 
[m_label setText:[NSString stringWithFormat:@"%d",--counter]]; 
} 
+0

Try int counter =. 1 – Shubhank

+0

Nitpicking; попробуйте переписать свой заголовок, --counter - это не то же самое, что и счетчик (что говорит ваш заголовок). – Jake

ответ

0

Вместо

[m_label setText:[NSString stringWithFormat:@"%d",--counter]]; 

Попробуйте

counter -=1; 
[m_label setText:[NSString stringWithFormat:@"%d",counter]]; 
3

Вы используете приращение (++) и декремента (-) операторы как префиксы или как суффиксы? Если вы используете их как суффиксы (как вы видите в заголовке вопроса), они будут вести себя так, как вы описываете. Если вы используете их в качестве префиксов (как вы показываете в теле вашего вопроса), они будут вести себя так, как вы их намереваетесь.

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

NSInteger counter = 1; 
NSLog(@"%i", counter++); // will print "1" 
// now counter equals 2 

При использовании в качестве префикса, выражение будет добавить/вычесть одну, а затем возвращает значение обновленной переменной.

NSInteger counter = 1; 
NSLog(@"%i", ++counter); // will print "2" 
// now counter equals 2 
1

Сохраните строку кода и сделайте вашу программу логикой более понятной.

NSInteger counter = 1; 

-(IBAction) addQuantity 
{ 
if (counter <= 9) 
    [m_label setText:[NSString stringWithFormat:@"%d",++counter]]; 
} 

-(IBAction) minusQuantity 
{ 
if (counter >= 1) 
    [m_label setText:[NSString stringWithFormat:@"%d",--counter]]; 
}