- (void) hiddenAllKey {
for (UIView *subview in [key subviews])
if ((subview.tag <= startSpecialPunctuation+1)&&(subview.tag >= spaceButton+1))
[subview removeFromSuperview];
}
Это тоже немного неправильно. Вы удаляете элементы из списка, который вы перечисляете, используя быстрое перечисление. Это может (должно) потерпеть неудачу легко.
Ранее я написал в UIView категорию для удаления всего, что можно было сделать с помощью простого цикла while. Теперь, что вы пытаетесь сделать ... вы можете сделать цикл for, где вы сами управляете итеративным индексом, то есть, когда вы не удаляете, вы увеличиваете, иначе вы сохраняете его тем же.
РЕДАКТИРОВАТЬ: предложение решения:
for (int idx = 0; idx < [[key subviews] count]; )
{
UIView *subview = [[key subviews] objectAtIndex: idx];
if ((subview.tag <= startSpecialPunctuation + 1) && (subview.tag >= spaceButton + 1))
{
[subview removeFromSuperview];
}
else
{
idx++;
}
}