我有一个大纲视图委托,我重写outlineView:dataCellForTableColumn:项目:使我的大纲视图中的单元格按钮(见this question)。这里是我的代表的代码形式:outlineView:dataCellForTableColumn:item:有奇怪的副作用
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;
{
MyCell * myCell = [[MyCell alloc] init];
// return nil;
return myCell;
}
这样做有一个奇怪的副作用。在我的大纲视图的数据源中,方法outlineView:objectValueForTableColumn:byItem:始终为tableColumn获取一个空值。
的代码是:
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
printf("tableColumn:%s\ttable identifier: %s\n", [[tableColumn className] cString], [[tableColumn identifier] cString]);
return [item valueForKey:[tableColumn identifier]];
}
,输出是:
tableColumn:(null) table identifier: (null)
什么奇怪的是,当我实现outlineView这只是发生:dataCellForTableColumn:项目:方法。我在这里错过了什么?
编辑:
修改这样的委托功能似乎来解决这个问题:
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;
{
printf("delegate column identifier: %s\n", [[tableColumn identifier] cStringUsingEncoding:NSASCIIStringEncoding]);
if (tableColumn == nil)
{
return nil;
}
MyCell * aCustomCell = [[MyCell alloc] init];
return aCustomCell;
}
不过,我真的不明白是怎么回事。如果任何人都可以解释,那会很有帮助。谢谢!