如何解决具有未知键的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];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。