具有未知键的NSDictionaries的NSTableView的动态填充

问题描述

|| 是否没有“简单”方式将包含具有未知密钥的NSDictionaries的NSArray绑定到NSTableView? 解决此“常见”问题的最佳方法是什么? 来自c#/ asp.net,这似乎是一个非常痛苦的操作。 编辑: 要弄清楚该应用程序是什么,它是一个简单的queryeditor,它在表视图中显示查询的结果。 我尝试遵循以下示例: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 \作为记录。     

解决方法

        看一下NSArrayController并在Interface Builder中配置列。然后就像1-2-3一样简单;) 从这里开始,继续阅读NSArrayController描述: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/CntrlContent.html     ,        好吧,很简单。 由于我要通过引用对列进行迭代,因此我必须使用0作为索引,因为在删除第一列之后,列数已经为负1。 将循环更改为以下即可解决该问题:
    for( int i=0; i < [columns count]; i++)
    {
        NSTableColumn *col = [columns objectAtIndex:0];
        NSLog(@\"removing column: %@\",[col identifier]);
        [_resultTableView removeTableColumn:col];
    }