gpt4 book ai didi

objective-c - 当父级折叠时,NSOutlineView ParentForItem 返回 nil

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

我有一个 NSOutlineView,我已为其编写了数据源委托(delegate)。当我将项目添加到组中并且组项目处于折叠状态时,parentForItem 返回 nil

这是我用来测试这个的代码。

- (IBAction)addItemToGroup:(id)sender {
TLItem *theNewItem= [[TLItem alloc] initWithTitle:@"My New Item"];
TLItem *theGroupItem = [self.sourceListItems objectAtIndex:0];
NSMutableArray *theItemList = [theGroupItem children];
[theItemList addObject:theNewItem];
[self.sourceListOutlineView reloadData];
TLItem *newItemParent = [self.sourceListOutlineView parentForItem:theNewItem];
NSLog(@"newItemParent = %@", newItemParent);
}

如果展开了 GroupItem,此方法会记录以下内容:

newItemParent = TLItem: 0x60800004bbb0

如果 GroupItem 折叠,此方法会记录以下内容:

 newItemParent = (null)

如何获取新添加项目的父项?

注意:我意识到这是一个愚蠢的示例,但在我的实际代码中,我需要能够沿着树向上查找层次结构中的所有父级。

最佳答案

假设您已经编写了数据源,请使用该数据源(而不是大纲 View )来导航层次结构。数据源是模型的权威。大纲 View 只是呈现该模型的某些部分的一种方式。在一般情况下,大纲 View 不会完整地表示模型,并且通常需要查阅数据源来回答此类查询。因此,跳过中间人,直接到达源头。

如有必要,您的项目类应该对其父级有弱引用。层次结构上的所有操作(添加子级、删除子级、将项目从一个父级移动到另一个父级等)都应通过数据源上的专用方法来保持父级引用的更新。您不应该在此类特定于层次结构操作的方法之外简单地获取和修改项目子项的可变数组。

关于objective-c - 当父级折叠时,NSOutlineView ParentForItem 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688714/

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