我有一个NSOutlineView,我想填充一个NSURL对象列表。我在NSTableView中使用它。作为移动到NSOutlineView的第一步(这样我可以按用户需要的各种标准对NSURL对象进行分组)我以一种模仿表视图的方式实现了NSOutlineViewDataSource协议的最小方法:
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
if(!item) return [[self.resultsArrayController arrangedObjects] count];
return 0;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
if(!item){
return [[self.resultsArrayController arrangedObjects] objectAtIndex:index];
}
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [item valueForKey:[tableColumn identifier]];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return NO;
}
这会导致抛出一个无法识别的选择器异常,显示正在调用[NSURL indexPath]
。任何人都知道为什么要调用此方法或如何解决它?
答案 0 :(得分:1)
我不确定这是你的情况,但是当我将大纲的选择索引路径绑定到我的控制器时,我遇到了与NSOutlineView相同的问题。之后,NSOutlineView每次选择项目时都会尝试查询项目的 indexPath 方法。
我认为此绑定旨在与 NSTreeController 结合使用。至少当我有一个时它工作正常。目前,我能找到的唯一解决方案是避免使用绑定或将其与NSTreeController一起使用。