我有一个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;
}
}
}
它的工作正常,除了值到字段的时间具有相同的字符串值。它始终只是将带有该值的第一个元素显示为键,因此对于所有相同的值值,将显示相同的键值。有谁知道如何解决这个问题?
答案 0 :(得分:2)
看起来你正在显示一个字典树,其对象是字符串或字典。
第一个问题是每个项目对象必须唯一地标识一行。密钥和值都没有此属性。 (关键是如果这是一个平面视图,但这是一个大纲视图,两个字典 - 一个是后代,兄弟或另一个的表兄弟 - 可以拥有相同的密钥。)相反,你应该制作一个模型对象对于每个键值对。
其次,字典值行应该是组项。您可以为此实现委托方法。