Как я могу удалить все NSTableColumns из NSTableView? - PullRequest
5 голосов
/ 22 декабря 2011

Я пытаюсь реализовать метод для очистки NSTableView всех элементов И столбцов. Но я получаю сбой, когда пытаюсь реализовать следующее:

- (void)clearResultData
{
    [resultArray removeAllObjects];
    NSArray *tableCols = [resultTableView tableColumns];
    if ([tableCols count] > 0)
    {
        id object;
        NSEnumerator *e = [tableCols objectEnumerator];
        while (object = [e nextObject])
        {
            NSTableColumn *col = (NSTableColumn*)object;
            [resultTableView removeTableColumn:col];
        }
    }
    [resultTableView reloadData];
}

Ответы [ 4 ]

16 голосов
/ 18 апреля 2012

Хорошо, если вам нужна помощь, вы можете удалить все столбцы следующим образом:

- (void)removeAllColumns
{
    while([[tableView tableColumns] count] > 0) {
        [tableView removeTableColumn:[[tableView tableColumns] lastObject]];
    }
}
4 голосов
/ 17 июня 2014

NSArray, возвращаемый tableColumns, изменяется на removeTableColumn.Не думайте, что это не изменилось.

Хотя он возвращается как неизменяемый NSArray, базовая реализация изменяется, и использование NSEnumerator с измененными коллекциями небезопасно.В цикле while вы отправляете сообщение nextObject перечислителю, чей текущий объект был только что удален - так может случиться плохое!

Вот более эффективная реализация:

NSTableColumn* col;
while ((col = [[tableView tableColumns] lastObject])) {
    [tableView removeTableColumn:col];
}

Когдав табличном представлении нет столбцов: tableColumns возвращает пустой массив, lastObject в пустом массиве возвращает nil, col присваивается значение nil, условие ложно и цикл while завершается.

0 голосов
/ 28 мая 2019

Вот реализация Swift:

tableView.tableColumns.forEach({tableView.removeTableColumn($0)})
0 голосов
/ 19 апреля 2014
[[[_tableView tableColumns] copy] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [_tableView removeTableColumn:obj];
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...