3

キーと値の 2 つの列を持つ NSOutlineView を使用する Mac OS X アプリケーションがあります。値の列を編集できます。NSString または NSDictionary が連続しています。セルの値のコードは次のようになります。

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {

    if ([[[tableColumn headerCell] stringValue] isEqualToString:@"Key"]) {
        id parentItem = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : root;

        return [[parentItem allKeysForObject:item] objectAtIndex:0];
    } else {
        if ([item isKindOfClass:[NSString class]]) {
            return item;
        } else if ([item isKindOfClass:[NSDictionary class]]) {
            return @"";
        } else {
            return nil;
        }
    }
}

フィールドの値が同じ文字列値を持つ場合を除いて、正常に機能しています。常にその値を持つ最初の要素をキーとして表示するため、同じキー値がすべての同じ値に対して表示されます。この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

2

オブジェクトが文字列または辞書のいずれかである辞書のツリーを表示しているように見えます。

最初の問題は、すべてのアイテムオブジェクトが行を一意に識別しなければならないことです。キーにも値にもこのプロパティはありません。(これがフラットテーブルビューの場合、キーはアウトラインビューであり、2つのディクショナリ(一方は子孫、兄弟、またはもう一方のいとこ)が同じキーを持つことができます。)代わりに、モデルオブジェクトを作成する必要があります。キーと値のペアごとに。

次に、ディクショナリ値の行はグループアイテムである必要があります。このために実装できるデリゲートメソッドがあります。

于 2009-11-23T00:33:04.190 に答える