NSOutlineView单元格具有相同值时出现问题

时间:2009-11-22 22:36:03

标签: objective-c cocoa macos nsoutlineview

我有一个Mac OS X应用程序,它使用带有两列的NSOutlineView:键和值,您可以在其中编辑值列。我连续有一个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;
        }
    }
}

它的工作正常,除了值到字段的时间具有相同的字符串值。它始终只是将带有该值的第一个元素显示为键,因此对于所有相同的值值,将显示相同的键值。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

看起来你正在显示一个字典树,其对象是字符串或字典。

第一个问题是每个项目对象必须唯一地标识一行。密钥和值都没有此属性。 (关键是如果这是一个平面视图,但这是一个大纲视图,两个字典 - 一个是后代,兄弟或另一个的表兄弟 - 可以拥有相同的密钥。)相反,你应该制作一个模型对象对于每个键值对。

其次,字典值行应该是组项。您可以为此实现委托方法。