Любая переменная, используемая внутри блока, const
копируется. Так что на самом деле у вас происходит это:
-(void) animate:(UIButton*) b withState: (int) state andLastState:(int) last_state {
if (state < last_state) {
int stateTemp = state;
float duration = 1.0 / 30.0;
[b animateWithDuration: duration
animations: ^{
[UIImage imageNamed:[NSString stringWithFormat:@"m1.a000%d.png", state]];
}
completion: ^{
const int stateTempCopy = stateTemp;
animate(b, stateTempCopy++, last_state);
}
];
}
}
Проблема заключается в попытке изменить переменную const
. Вы не можете сделать это. К счастью, есть способ обойти это, и это с помощью спецификатора __block
.
Просто измените int stateTemp = state;
на __block int stateTemp = state;
и все будет хорошо. (Для документации по __block
посмотрите документацию )