Динамическое заполнение NSTableView с помощью NSDictionaries с неизвестными ключами - PullRequest
2 голосов
/ 18 июня 2011

Нет ли "простого" способа привязать NSArray, который содержит NSDictionaries с неизвестными ключами к NSTableView?

Как лучше всего решить эту «общую» проблему?

Исходя из c # / asp.net, это кажется очень болезненной операцией.

редактирование:

Чтобы уточнить, о чем приложение: это простой редактор запросов, который отображает результат запроса в виде таблицы.

Я пытался следовать этому примеру: http://www.cocoabuilder.com/archive/cocoa/150245-dynamic-columns-in-nstableview.html

Я использую объект, который реализует протокол NSTableViewDataSource.

Когда пользователь отправляет первый запрос, результат отображается правильно. Но второй запрос показывает что-то странное: столбцы удаляются некорректно и добавляются к существующим, но не ко всем.

В методе, который создает таблицу, я использую что-то вроде этого:

    NSArray *columns = [_resultTableView tableColumns];

    if(columns && [columns count] > 0)
    {
        for( int i=0; i < [columns count]; i++)
        {
            NSTableColumn *col = [columns objectAtIndex:i];
            NSLog(@"removing column: %@", [col identifier]);
            [_resultTableView removeTableColumn:col];
        }
    }


    NSDictionary *dict = [_resultTableDataSource.data objectAtIndex:0];

    NSArray *keys = [[dict keyEnumerator] allObjects];

    for( int i=0; i < [keys count]; i++)
    {
        NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:[keys objectAtIndex:i]];
        [column setEditable:NO];
        [[column headerCell] setStringValue:[keys objectAtIndex:i]];
        [_resultTableView addTableColumn:column];
    }

    [_resultTableView setDataSource:_resultTableDataSource];

    [_resultTableView reloadData];

_resultTableDataSource.data является NSMutableArray с NSMutableDictionary в качестве записей.

Ответы [ 2 ]

0 голосов
/ 18 июня 2011

Хорошо, достаточно просто.

Поскольку я перебираю столбцы по ссылке, я должен использовать 0 в качестве индекса, поскольку после удаления первого столбца число столбцов уже минус 1.

Изменение цикла на следующее решает проблему:

    for( int i=0; i < [columns count]; i++)
    {
        NSTableColumn *col = [columns objectAtIndex:0];
        NSLog(@"removing column: %@", [col identifier]);
        [_resultTableView removeTableColumn:col];
    }
0 голосов
/ 18 июня 2011

Взгляните на NSArrayController и настройте столбцы в Интерфейсном Разработчике. Тогда это так же просто, как 1-2-3;)

Начните здесь и читайте описание NSArrayController: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/CntrlContent.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...