NSOutlineView parentForItem returns 父项折叠时为零
NSOutlineView parentForItem returns nil when parent is collapsed
我有一个 NSOutlineView
,为此我写了 datasource
和 delegate
。当我将项目添加到组中并且组项目处于折叠状态时,parentForItem
returns 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)
如何获取新添加项的父项?
注意:我意识到这是一个愚蠢的例子,但在我的实际代码中,我需要能够向上走树以找到层次结构中的所有父级。
鉴于您已经编写了数据源,请使用它而不是大纲视图来导航层次结构。数据源是模型的权限。大纲视图只是呈现该模型某些部分的一种方式。在一般情况下,大纲视图不会有模型的完整表示,并且通常需要查阅数据源来回答此类查询。所以,跳过中间人,直奔源头。
如有必要,您的项目 class 应该对其父项具有弱引用。层次结构上的所有操作(添加子项、删除子项、将项目从一个父项移动到另一个等)都应该通过数据源上的专用方法来保持父项引用更新。您不应该在此类 hierarchy-manipulation-specific 方法之外简单地获取和修改项目子项的可变数组。
我有一个 NSOutlineView
,为此我写了 datasource
和 delegate
。当我将项目添加到组中并且组项目处于折叠状态时,parentForItem
returns 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)
如何获取新添加项的父项?
注意:我意识到这是一个愚蠢的例子,但在我的实际代码中,我需要能够向上走树以找到层次结构中的所有父级。
鉴于您已经编写了数据源,请使用它而不是大纲视图来导航层次结构。数据源是模型的权限。大纲视图只是呈现该模型某些部分的一种方式。在一般情况下,大纲视图不会有模型的完整表示,并且通常需要查阅数据源来回答此类查询。所以,跳过中间人,直奔源头。
如有必要,您的项目 class 应该对其父项具有弱引用。层次结构上的所有操作(添加子项、删除子项、将项目从一个父项移动到另一个等)都应该通过数据源上的专用方法来保持父项引用更新。您不应该在此类 hierarchy-manipulation-specific 方法之外简单地获取和修改项目子项的可变数组。