我有一些代码可以执行此操作(在下面)但是我遇到一个错误,它停止工作,错误是''MyOutlineView'可能无法响应'-objectArray'',它说它需要声明但是我不知道我应该在Header File中使用什么代码来声明它。
守则:
- (void) outlineView: (NSOutlineView *) aView
willDisplayCell: (id) aCell
forTableColumn: (NSTableColumn *)aColumn
item: (id) anItem
{
id rootObj = anItem;
unsigned row = [aView rowForItem:anItem];
[aCell setDrawsBackground: YES];
while ([aView levelForRow:row] != 0) {
row --;
rootObj = [aView itemAtRow:row];
}
// The colours here are foul and ugly. Use something else, for
// God's sake!
if ([[self objectArray] indexOfObject:rootObj] % 2)
[aCell setBackgroundColor: [NSColor yellowColor]];
else
[aCell setBackgroundColor: [NSColor blueColor]];
}
答案 0 :(得分:3)
我不确定我是否100%肯定你在这里尝试做什么,但在我看来你可以简单地替换它:
if ([[self objectArray] indexOfObject:rootObj] % 2)
[aCell setBackgroundColor: [NSColor yellowColor]];
else
[aCell setBackgroundColor: [NSColor blueColor]];
带
if ([aView rowForItem:rootObj] % 2)
[aCell setBackgroundColor: [NSColor yellowColor]];
else
[aCell setBackgroundColor: [NSColor blueColor]];
你的rootObj是大纲中的一个项目,就像anItem一样,这应该告诉你root项目在哪一行。当然,也许我不明白你在那里找到的是什么。
答案 1 :(得分:1)
objectArray是MyOutlineView的实例变量吗?如果是这样,只需直接访问它,如下所示:
if( [objectArray indexOfObject:rootObj] % 2 )
...
代码[self objectArray]试图调用一个名为objectArray的方法,而不是引用ivar objectArray。
修改强> 以上假设objectArray是MyOutlineView的实例变量,如:
@interface MyOutlineView {
NSArray* objectArray;
}