gpt4 book ai didi

cocoa - NSOutlineView 重新加载项 : has no effect

转载 作者:行者123 更新时间:2023-12-03 16:02:23 24 4
gpt4 key购买 nike

我正在尝试释放基于 View 的一些压力 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是基于 View 的。

更新2

尝试一些东西让我意识到我正在重新加载的对象是一个二级对象(cf对象树)并调用 reloadItem:firstLevelObject reloadChildren:YES确实有效。

我们是否可以只在第一级对象上调用 reloadItem: ?在我的情况下,这将是非常低效的(我只有一个二级项目和大量的二级项目)!

nil ->firstLevelA ->secondLevel1
->secondLevel2
->firstLevelB ->secondLevel3
->secondLevel4

尝试子类化 NSOutlineView 并重写 reloadItem:同时。

更新3

我看了一下NSOutlineView in Cocotron开始时,我觉得我需要编写的覆盖 reloadItem 的代码会非常繁重。有人确认吗?

最佳答案

我在基于 View 的大纲 View 中遇到了同样的问题,其中调用 -reloadItem: 似乎没有执行任何操作。这看起来确实是一个大错误,尽管文档没有明确说明 reloadItem 将重新获取该行的 View 。

我的解决方法是调用 NSTableView-reloadDataForRowIndexes:columnIndexes: ,这似乎按预期工作,触发对 -outlineView 的调用: viewForTableColumn:item: 仅适用于该项目的委托(delegate)方法。您可以通过调用-rowForItem:并传入您想要重新加载的项目来获取需要重新加载的行。

关于cocoa - NSOutlineView 重新加载项 : has no effect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com