问题描述
||
是否没有“简单”方式将包含具有未知密钥的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];
}