扩展项目时,NSOutlineView行索引会发生变化

时间:2011-02-13 13:36:29

标签: cocoa nsoutlineview

假设我有一个NSTableView(例如,a)和一个NSOutlineView(例如,b)。

a的数据源中,我正在尝试获取b所有选定项目的父项。在行中没有。 rowIndex的{​​{1}}我想要a 和{/ em> rowIndex选中的项目我想将此字符串连接到名称这个项目的父项。例如,b

  • 1和1.1
  • 2

a

  • 1
    • 1.1(已选中)
  • 2(已选中)
  • 3

这是b的{​​{1}}。

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

问题在于,当我展开项目a时,始终返回最后一个展开的项目。

我正在尝试列出所选项目及其父母。展开项目时,所有项目的父项都会更改为NSUInteger index = [[outlineView selectedRowIndexes] firstIndex]; for (NSUInteger i = 0, target = rowIndex; i < target; i++) index = [[outlineView selectedRowIndexes] indexGreaterThanIndex:index]; NSLog(@"%@", [outlineView [outlineView itemAtRow:index]]); if([outlineView parentForItem:[outlineView itemAtRow:index]] != NULL) { return [NSString stringWithFormat:@"%@ %@", [outlineView parentForItem:[outlineView itemAtRow:index]], [outlineView itemAtRow:index]]; } else { return [outlineView itemAtRow:index]; } return NULL;

我做错了吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您发现,不能使用简单的整数来表示嵌套数据集中的索引。相反,您需要使用NSIndexPath。正如文档所说:

  

NSIndexPath类表示   树的特定节点的路径   嵌套数组集合。这条路是   称为索引路径。