我正在尝试释放一个基于视图的NSOutlineView
上的一些紧张情况。我更改了单个项目属性,并最初使用[myOutlineView reloadData]
成功重新加载。
我尝试使用[myOutlineView reloadItem: myOutlineViewItem]
,但它从未调用- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
方法,因此数据没有更新。
-(void)reloadOutlineViewObject
{
//[myOutlineView reloadData]; //Reload data just fines but is ressource-hungry
NSLog(@"%d",[myOutlineView rowForItem:myOutlineViewItem]; //Making sure my object is an item of the outlineView, which it is !
[myOutlineView reloadItem:myOutlineViewItem];
}
我在这里是否漏掉了什么?
更新
评论中指出,我的outlineView是基于视图的。
更新2
尝试了一些东西后,我意识到我重新加载的对象是第二级对象(参见对象树),调用reloadItem:firstLevelObject reloadChildren:YES
确实有效。
可能只能对一级对象调用reloadItem:吗? 在我的情况下这将非常低效(我只有一个双层项和大量的二级项)!
nil ->firstLevelA ->secondLevel1
->secondLevel2
->firstLevelB ->secondLevel3
->secondLevel4
我打算尝试子类化NSOutlineView,并在此期间重写reloadItem:
。
更新3
我查看了Cocotron中的NSOutlineView,并感觉需要编写的代码来覆盖 reloadItem 会相当繁重。有人可以确认吗?