2011-06-18 9 views
2

未知のキーを持つNSDictionaryを含むNSArrayをNSTableViewにバインドする "単純な"方法はありませんか?不明なキーを持つNSDictionariesを使用したNSTableViewの動的集計

この「共通の」問題を解決する最良の方法は何ですか?

C#/ asp.netから来ているのは本当に苦しい操作のようです。

編集:テーブルビューでのクエリの結果を表示するシンプルなqueryeditor:

アプリが何であるかについて明確にします。私はNSTableViewDataSourceプロトコルを実装するオブジェクトを使用http://www.cocoabuilder.com/archive/cocoa/150245-dynamic-columns-in-nstableview.html

私はこの例に従うことを試みました。

ユーザーが最初のクエリを発行すると、結果が正しく表示されます。しかし、2番目のクエリは、何か変わったことを示しています。列は正しく削除されず、既存のものに追加されますが、すべてではありません。私はこのようなものを使用するテーブルを作成する方法では、

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がレコードとしてNSMutableDictionaryのでNSMutableArrayのです。

+0

私が今理解している限り、NSTableViewDataSourceを実装して、自分自身でColumnsを構築する必要があります。 –

+0

私は、そのアプローチは、いかにノー・トゥ・・・・・・・・・・・・然、正しいでしょうか? –

答えて

0

[OK]をシンプル:ここにスタート

)とNSArrayControllerは記述で読み、それは1-2-3と同じくらい簡単です。

私が参照して列を反復処理するので、最初の列を除去した後、列数が既にあるので、私は、インデックスとして0を使用する必要がマイナス以下にループを変更する1.

は、問題を解決します:

for(int i=0; i < [columns count]; i++) 
    { 
     NSTableColumn *col = [columns objectAtIndex:0]; 
     NSLog(@"removing column: %@", [col identifier]); 
     [_resultTableView removeTableColumn:col]; 
    } 
関連する問題