NSArray, возвращаемый tableColumns
, изменяется на removeTableColumn
.Не думайте, что это не изменилось.
Хотя он возвращается как неизменяемый NSArray, базовая реализация изменяется, и использование NSEnumerator с измененными коллекциями небезопасно.В цикле while вы отправляете сообщение nextObject перечислителю, чей текущий объект был только что удален - так может случиться плохое!
Вот более эффективная реализация:
NSTableColumn* col;
while ((col = [[tableView tableColumns] lastObject])) {
[tableView removeTableColumn:col];
}
Когдав табличном представлении нет столбцов: tableColumns возвращает пустой массив, lastObject в пустом массиве возвращает nil, col присваивается значение nil, условие ложно и цикл while завершается.