为什么对outlineView多次调用objectValueForTableColumn?

时间:2012-07-09 08:40:52

标签: objective-c cocoa

我正在学习Apple OS x开发人员库的可可大纲视图。示例源是这样的:

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    return (item == nil) ? [FileSystemItem rootItem] : [(FileSystemItem *)item       childAtIndex:index];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return (item == nil) ? YES : ([item numberOfChildren] != -1);
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    return (item == nil) ? 1 : [item numberOfChildren];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return (item == nil) ? @"/" : [item relativePath];
}

这将列出我系统中的所有文件,如树。 问题是:
1.如果“/”下有32个文件,方法

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

会被叫62次,我不知道为什么? 2.方法

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

没有关于该行的参数,那么cocoa如何确定该项应该显示哪一行?

1 个答案:

答案 0 :(得分:1)

  1. 如果“/”下有32个文件,方法

    • (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
  2. 将显示每个行和列的

    我假设您有2列,实际显示31行

    1. 该方法没有关于行的参数,那么cocoa如何确定该项应该显示哪一行?
    2. item是指向用于填充表的对象的指针。这是NSOutlineViewDataSource Protocol需要知道的全部内容。 NSOutlineView

      内部显示行的详细信息