Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 向NSOutlineView添加标签元素_Objective C_Macos_Cocoa_Nsstring_Nsoutlineview - Fatal编程技术网

Objective c 向NSOutlineView添加标签元素

Objective c 向NSOutlineView添加标签元素,objective-c,macos,cocoa,nsstring,nsoutlineview,Objective C,Macos,Cocoa,Nsstring,Nsoutlineview,我将NSOutlineView设置为使用数据源。我在显示我的数据时没有问题,除了一个小细节:标记分支 我需要在树中显示分支,这些分支只是作为对子元素进行分组的一种方式。比如说,我有一个“Parent”元素。在“父项”下,我将有一个名为“子项”的可展开元素,展开后,将显示所有子项。但是元素“Children”不是业务逻辑的一部分 我知道NSOutlineView不会保留它显示的数据,因此我在.m文件的开头创建了一个常量,其中包含的“Children”字符串。问题是,如果我的结构包含许多父级,树的行

我将
NSOutlineView
设置为使用
数据源
。我在显示我的数据时没有问题,除了一个小细节:标记分支

我需要在树中显示分支,这些分支只是作为对子元素进行分组的一种方式。比如说,我有一个“Parent”元素。在“父项”下,我将有一个名为“子项”的可展开元素,展开后,将显示所有子项。但是元素“Children”不是业务逻辑的一部分

我知道
NSOutlineView
不会保留它显示的数据,因此我在
.m
文件的开头创建了一个常量,其中包含的“Children”字符串。问题是,如果我的结构包含许多父级,树的行为就会变得不稳定,因为每次我扩展“Children”,我都在有效地扩展树中的所有“Children”


那么,我如何才能将一个元素添加到树中(仅用于标记目的),尽管它看起来相同,但却不相同?

我建议您在数据源内部创建一个模型,该模型与要在大纲中显示的内容的结构紧密匹配。这样做的双重优点是易于理解,并且通常对委托调用非常有效

例如,您的真实模型可能是一个书籍列表,但出于显示目的,您希望将它们分组为标题的第一个字母(a、B、C…)。在数据源委托中,您可以创建一个具有以下结构的字典数组
@{“firstLetter”:@“A”,@“books”:bookArray}。
。在委托方法中,然后使用此新数组作为模型


当然,您需要管理此内部模型,但这通常足够简单。

我的确切问题是,我在控制器的多个位置显示相同的字符串。我尝试过复制它,但它总是以相同的地址结束,我相信这就是导致错误的原因。如果在多个位置使用完全相同的对象,则在重新加载时也会出现崩溃状态的问题。您应该改为使用副本或不同的包装器对象。