首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何像目录树一样给NSOutlineView上的节点添加更多的节点?

NSOutlineView 是 macOS 开发中的一个重要组件,用于显示层次化的数据结构,类似于文件系统的目录树。要向 NSOutlineView 中的节点添加更多节点,你需要遵循以下步骤:

基础概念

  1. 数据源(DataSource):NSOutlineView 需要一个数据源来提供节点的数据和结构信息。
  2. 模型对象(Model Object):代表每个节点的数据结构。
  3. 代理(Delegate):可选,用于自定义视图的行为。

相关优势

  • 层次化展示:能够清晰地展示数据的层级关系。
  • 动态更新:可以实时添加、删除或修改节点。
  • 用户友好:提供直观的用户界面,便于用户操作和管理数据。

类型与应用场景

  • 文件浏览器:展示文件系统的目录结构。
  • 组织结构图:显示公司或团队的层级关系。
  • 设置面板:提供多层次的配置选项。

实现步骤

  1. 定义模型对象: 创建一个类来表示每个节点,通常包含一个标识符、显示名称和一个子节点数组。
  2. 定义模型对象: 创建一个类来表示每个节点,通常包含一个标识符、显示名称和一个子节点数组。
  3. 设置数据源: 实现 NSOutlineViewDataSource 协议的方法,提供节点的数据。
  4. 设置数据源: 实现 NSOutlineViewDataSource 协议的方法,提供节点的数据。
  5. 添加新节点: 当你需要添加新节点时,更新模型对象并通知数据源数据已更改。
  6. 添加新节点: 当你需要添加新节点时,更新模型对象并通知数据源数据已更改。

遇到问题及解决方法

问题:添加节点后视图没有更新。

原因:可能是因为数据源没有正确通知视图数据已更改。

解决方法:确保调用 reloadData(forRowIndexes:columnIndexes:) 或类似的方法来刷新视图。

代码语言:txt
复制
outlineView.reloadData(forRowIndexes: IndexSet(integer: outlineView.row(forItem: parentItem)), columnIndexes: IndexSet(integer: 0))

通过以上步骤,你可以有效地向 NSOutlineView 中的节点添加更多节点,并确保视图能够正确地反映数据的最新状态。

相关搜索:向ACS上的Kubernetes集群添加更多节点如何确定节点w是否位于树中节点u和节点v之间的路径上?在像数据结构这样的嵌套树中,如何通过父节点的id将子节点添加到父节点的子数组中?如何在树的层次结构中添加父节点?如果文本节点不是父节点的唯一子节点,如何给每个文本节点添加`span`标签?随机树中的每个节点是否像avl一样具有(-1和1)之间的平衡因子?随机化算法如何在vb.net的树视图节点上创建工具提示?Java XML如何使用xpath查找更多子节点,并将其添加到/替换到XML文件中的节点列表如何在新添加的节点上均衡具有相同弹性IP的容器?如何在Vec中添加元素,比如二叉树的叶子节点?如何打印二叉树中已添加到队列的节点值?如何在Jelastic环境中将数据卷挂载到添加的节点上如何在指定的子节点上使用XSLT保存/添加CDATA节?如何将remoteproc节点添加到基于Zynq-7000的RedPitaya板的设备树中如何使用PHP比较XML中的元素并添加具有3个或更多可能结果的新节点?如何列出所有具有0个或更多特定连接类型的节点,以及gremlin tinkerpop上的连接计数数据如何在像babylon.js-NulEngine这样的节点服务器上设置three.js的无头版本?如何向Chef Server上可以访问数据包的客户端列表中添加节点?如何将从节点上的.jenkins文件夹路径更改为另一个目录值如何将CSS属性添加到sigma.js上的选定节点(画布渲染器)
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 知识点 | 纯代码实现NSOutlineView的详细步骤

    可以试试NSOutlineView。NSOutlineView是NSTableView的子类,但是他比NSTableView多了分组的功能,使用层级的数据结构。 ? ? 哦!那我查查怎么使用。...创建一个OS X项目工程,新建一个NSViewController,在ViewController中添加NSOutlineView对象并实现NSOutlineViewDataSource和NSOutlineViewDelegate...经过两位的研究,实现详情以及注意事项总结为以下几个步骤: 1.初始化outlineView并设置相关属性 需要注意的是,outlineView必须放在scrollView上才可以显示,所以我们在初始化outlineView...5.展开的节点是否自动保存。...- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item ; 4.获取到选择节点后的通知。

    2K40

    【MYSQL】 ——索引(B树B+树)、设计栈

    阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 前引:考虑有一本书。如何快速找到一个章节所在的位置,就需要一个目录。...四:数据库的索引底层结构 1:B树 B树又叫B-树(非念B减树,只是符号),B树是一个有序的N叉搜索树,每一个节点上可能有N个值,N个值划分出来N+1个区间 特点: ①:同样高度的B树和二叉搜索树,前者能表示的元素个数更多...②:在搜索的时候B树的比较次数更多 ③:虽然B树总的比较次数更多,但是B树的硬盘IO读取次数更少,成本更低(一次硬盘读取相当于内存1w次比较) 解释:同样多的元素个数下,B树存储元素所需要的节点数更少...,而硬盘1次读取,是把节点中所有元素一次性读取出来, 2:B+树 在B树的基础上,做出了改进,B+树也是N叉搜索树,划分出来N个区间,根节点上的最后一个值为最大/小值 特点: (1):B+树一个节点中有...,沿着链表在往后面进行查询就可以了,无需在对树进行回溯 ②查询时间稳定——查询任何一个元素,都是要从根节点查询到叶子节点的,过程中IO硬盘读取的次数是一样的(稳定比快速更重要) ③存储数据便捷——根节点存储关键字

    13210

    Lucene系列(16)工具类之kdb Bkd树原理概述

    关键的问题就是,只有平衡的情况下才能保证这一点.设想一下,给途中的kd树,添加两个节点(1,1) ,(0,0), 整棵树的所有节点几乎已经全部在左侧了,这样就破坏了原有的平衡。...磁盘通常有高的延迟及高的吞吐量,这意味着读取大的数据块是有优势的,因为读取晓得数据块将话费更多的时间在延迟上。树比较低,意味着需要更少的逻辑读取....在磁盘上,一个b树的节点的大小至少是和一个页一样大,也就是4k.更多的时间是大于这个值的. 因此,一个节点经常有成百上千个孩子节点. 像其他b树的变种一样,kdb树保证自身是平衡的树....这是通过插入策略来保证的,如果一个插入元素在叶子节点上,且这个叶子节点没满, 那么将这个元素添加到这个叶子节点。如果叶子节点是满的,那就分裂....不是通常想象的, 将值写入到树的高层节点上,而是只给高层节点添加一个区域。 如果一个元素在区域之外,事情就更复杂了。

    4.7K30

    重温数据结构:理解 B 树、B+ 树特点及使用场景

    ,然后去范围对应的子树中继续查找 以此循环,直到找到或者到叶子节点还没找到为止 B 树如何保证平衡 我们知道,平衡的树之所以能够加快查找速度,是因为在添加、删除的时候做了某些操作以保证平衡。...网上找到一张很不错的动图,我们来根据它分析下 B 树添加元素时如何保证平衡。...再添加元素也是类似的逻辑: 首先考虑要插入的子树是否已经超出了关键字数的限制 超出的话,如果要插入的位置是叶子节点,就只能拆一个关键字添加到要插入位置的父节点 如果非叶子节点,就得从其他子树拆子树给新插入的元素做孩子...删除也是一样的,要考虑删除孩子后,父节点是否还满足子树 k 介于 M/2 和 M 的条件,不满足就得从别的节点拆子树甚至修改相关子树结构来保持平衡。...B+ 树的查找必会查到叶子节点,更加稳定。 有时候需要查询某个范围内的数据,由于 B+ 树的叶子节点是一个有序链表,只需在叶子节点上遍历即可,不用像 B 树那样挨个中序遍历比较大小。

    3K41

    【MySQL】MySQL索引与B+树的概念

    而像上面一样有分类区域,也有分类书架呢?至少是折半,甚至是 Log 级别,效率是不是一下就快了很多。 在数据库中,其实情况也是和上面类似的。...我们有一个根节点,下面还有一层目录节点,一般来说目录节点会按顺序记录id范围,这个页在数据少的时候也是存放数据的,但是当数据填充满了之后,就会进行页分裂,将数据转而存储到下层页节点上,而当前页成为目录页也叫非数据页...关于页如何分裂,以及如何增加高度分层,原理就更为复杂了,但大体上的概念只要学过树相关概念的同学应该还是能够想明白的。主要就是类似于平衡二叉树的分裂,当元素达到页中元素上限时,将中间数据向上分裂。...假设我们给 a、b、c 三个字段建立联合索引,那么它会一层一层的建立索引,也就是说,a 下面包含 b ,b 下面包含 c ,最后形成多键值组合排列的页节点。...这种页节点很明显会占用更多的空间,因此,联合索引的 B+ 树的高度可能会比聚集索引要更高一些。

    12510

    B+树(4)联合索引 --mysql从入门到精通(十六)

    二级索引查询先查询列+页码名称的目录非叶子节点,之后在查询到叶子节点,此刻叶子节点上存储的是主键和列,在通过主键查询整条数据。...2)c2相同的情况下,按c3排序。 所以现在底层叶子节点记录着:c2,c3,和他对应的主键c1,目录记录非叶子节点记录着c2,c3和页码名称,先按c2进行排序,如果一样,就按c3排序。...InnoDB索引树注意事项: 根节点保持不变 B+树的形成过程,1)给新表建立主键索引(聚簇索引),聚簇索引不是人为创建的,默认就有,此刻就会创建根节点页面,里面没有数据。...内节点目录项唯一性 二级索引的内节点存储的是列值,但因为列值,比如姓名没有唯一性,可能有两个重名甚至更多重名的,这时候如何辨识他的唯一性呢,所以二级索引在目录页存储的不仅仅是列值+页码名称,还会带上当前行记录唯一主键...一个页面最少存储两条记录 我们知道b+树只要三层层级就能存储庞大的数据,查询效率非常高,每次往下查询都会过滤掉很多没必要的子目录,那如果一个大目录页只放一个子目录是什么效果呢?

    50221

    【Linux】打破Linux神秘的面纱

    所以综合以上我们观察到的结果,我们可以判断出Linux的结构就是一个多叉树,其中 / 为所有节点的祖宗节点,其下有home节点,用来存放普通用户的信息(下图为我的root账号下的两个普通用户,其中一个是刚开始不会搞搞错了的用户...,有一个错误报告),我们在使用的时候一般使用普通用户来进行操作,因为root权限太大了,有错误不容易被发现,并且在初学的时候容易把东西给搞坏 所以我们对文件和目录进行操作,本质上就是对这颗多叉树进行增删查改...,相对路径查找也只在父节点的兄弟节点中,非常的高效和准确 二、如何看待Linux指令 1、指令可以被看做可执行程序 依照我们现在所掌握的知识来看,Linux当中的文件可以被分为两类,一类是目录,一类是非目录文件...~其实事实确实是这样的,我们可以把自己写的可执行程序设置为指令,当然这个是需要root权限才可以移动到指令目录下的,使用普通账户就会像下图一样没有权限 我们用nano写了一个C语言文件,这里的nano...移动到bin中然后直接输入a.out,该可执行程序就可以作为一个指令的形式来执行了 这个给过程也叫做安装,再将这个可执行程序从bin中移除就叫做卸载,跟我们使用的电脑上的卸载安装本质上是一样的

    4810

    MySQL的索引为什么用B+Tree?InnoDB的数据存储文件和MyISAM的有何不同?

    平衡二叉树的子节点高度差不能超过1,像下图中的二叉树,关键字为15的节点,它的左子节点高度为0,右子节点高度为1,高度差不超过1,所以下面这棵树是一棵平衡二叉树。 ?...查询效果不稳定:如果在一个高度很深的平衡二叉树中,若是查询的数据正好是根节点,那么就会很快的查到,若是查询的数据正好是叶子节点,那么会进行多次磁盘IO后才能返回,响应时间有可能和根节点的不在一个数量级上...那么来看一下在B+Tree中是如何进行数据查询的。...首先和平衡二叉树相比,B+Tree的深度更低,节点保存关键字更多,磁盘IO次数更少,查询计算效率更好。...B+Tree的磁盘IO读写能力更强,因为B+Tree的每个分支节点上只保存了关键字,这样每次磁盘IO在读写的时候,一页16K数据量可以存储更多的关键字了,每个节点上保存的关键字也比B-Tree更多了。

    1.6K30

    1w字MySQL索引面试题(附md文档)

    目录项记录只有主键值和页的编号两个列,而普通的用户记录的列是用户自己定义的,包含很多列,另外还有InnoDB自己添加的隐藏列。...针对同样的数据,如果我们把二叉树改成 三叉树: 上面的例子中,我们将二叉树变成了三叉树,降低了树的高度。如果能够在一个节点中存放更多的数据,我们还可以进一步减少节点的数量,从而进一步降低树的高度。...如果存储千万级别的数据,只需要三层就够了 B+树的非叶子节点不存储用户记录,只存储目录记录,相对B树每个节点可以存储更多的记录,树的高度会更矮胖,IO次数也会更少。...多叉树(multiway tree)允许每个节点可以有更多的数据项和更多的子节点。2-3树,2-3-4树就是多叉树,多叉树通过重新组织节点,减少节点数量,增加分叉,减少树的高度,能对二叉树进行优化。...不一定会失效,每一条sql具体有没有使用索引 可以通过trace追踪一下 最好还是给上默认值 数字类型的给0,字符串给个空串“”, 参考上一题 更多资料获取 最后面就是领取暗号,公众号回复即可!

    33520

    -- react版的倒计时实现

    简单来讲,就是每个div,在react中都可以被看做一个组件,然后把这些react编写的组件,像div嵌套那样,进行大组件套小组件的这种层层包装的形式,组装成整个ui页面。...也就是先用react来把页面结构生成出来,然后在再相应的页面组件中添加各种js程序。 //============== 首先把页面的结构先搭出来,新建一个目录,。。。...并且该组件树只能有一个根节点,最终这棵组件树会被ReactDOM.render渲染成HTML标签。...这时的ul,它并不是一个真正的DOM节点,而是一个虚拟的DOM节点,这些节点就是一些标记之类的记号,只是React知道该如何处理它们。...这样就是整个组件在初始化的时候给一个值,然后当dom加载完成之后给了另一个值,然后触发了render方法。 接下来我们就要使用setInterval方法,让这个过程不断的重复。这样计时器就Ok了。

    2K70

    Mysql中的索引

    聚簇索引:索引的排列方式和数据的排列方式是一样的。...非聚簇索引:索引的排列方式和数据的排列方式不一样。 聚簇索引和非聚簇索引的区别 聚簇索引就是主键上创建的索引。聚簇索引在叶子节点存储的都是表的数据。 非聚簇索引就是非主键上创建的索引。...非聚簇索引,索引的逻辑顺序和磁盘上物理存储顺序不一样,非聚簇索引在叶子节点存储的是主键和索引列,当我们使用非聚簇索引查询数据时,需要拿到叶子节点上的主键在去表中查需要的数据,这个过程叫做回表。...因此页目录中提供了二分查找,来提高检索的效率 B+树的检索过程 从B+树的跟开始,逐层找到叶子节点 找到叶子节点对应的数据页,将数据页加载到内存中,通过页目录的㯾大致找到数据所在的分组 在分组中通过聊表的遍历找到记录...B树相对于平衡二叉树,每个节点存储了更多的键值(key)和数据(data),并且每个节点有更多的子节点,最多子节点的个数一般称为阶。

    3.3K20

    【愚公系列】2022年01月 Java教学课程 50-集合对象Set

    二叉查找树,又称二叉排序树或者二叉搜索树 每一个节点上最多有两个子节点 左子树上所有节点的值都小于根节点的值 右子树上所有节点的值都大于根节点的值 二叉查找树结构图 二叉查找树和二叉树对比结构图...二叉查找树添加节点规则 小的存左边 大的存右边 一样的不存 3.3平衡二叉树 平衡二叉树的特点 二叉树左右两个子树的高度差不超过1 任意节点的左右两个子树都是一颗平衡二叉树 平衡二叉树旋转...旋转触发时机 当添加一个节点之后,该树不再是一颗平衡二叉树 左旋 就是将根节点的右侧往左拉,原先的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右子节点 右旋 就是将根节点的左侧往右拉...,左子节点变成了新的父节点,并把多余的右子节点出让,给已经降级根节点当左子节点 平衡二叉树和二叉查找树对比结构图 平衡二叉树旋转的四种情况 左左 左左: 当根节点左子树的左子树有节点插入,...(不能出现两个红色节点相连 的情况) 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点 红黑树添加节点的默认颜色 添加节点时,默认为红色,效率高 红黑树添加节点后如何保持红黑规则

    29650

    基于 HTML5 网络拓扑图的快速开发之入门篇(二)

    setPosition 设置节点位置以及 setImage 给节点添加图片;接着在两个节点之间通过 ht.Edge(sourceNode, targetNode) 添加了两条连线(实际上还可以更多),...这一篇我的想法是在左侧添加一个显示所有节点的“树”节点列表,就是将场景中所有的节点都添加到这个“树”列表中。这个部分在我看来简直是简单到极点啊,当然,HT 很多组件都跟这个类似,非常方便。...我们在上一篇中有介绍过 addToDOM 函数,用来将组件添加进 body 体中,我们要实现左边是“树列表”右边是拓扑场景,该如何做呢?...所以就算我们设置了 name 属性,但是再设置 label 属性还是能将 name 属性设置的值给覆盖掉的,而树组件上获取的只是节点的 name,所以两者并不冲突。...突然感觉树上的节点显示图标为什么都一样。。。改图标!

    93830

    MySQL之索引

    如何创建索引 创建数据表时添加索引 CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...); 以修改数据表的形式添加索引...索引是如何工作的 索引的出现其实是为了提高数据查询的效率,就像书的目录一样,根据目录可以快速定位到内容,类比于索引,根据索引提供指向存储在表的指定列中的数据值的指针,根据指针找到包含该值的行。...二叉树是搜索效率最高的,但是实际上没有多少数据库存储使用,因为索引不止存在于内存中,还要写在磁盘上。数据量较大时,二叉树的树过高,查询时需要访问过多节点,即需要硬盘多次寻址,这是一个耗时操作。...N叉树 概念:允许树的每个节点可以有两个以上的子节点,那么这个树就称为N阶多叉树。...常见问题 生产数据库添加索引 在开发中我们会遇到给生产数据库的表增加索引的情况,该行为属于是DDL操作,在执行时数据表会进行锁表,即表在锁定期间不可对表进行操作,必须等锁被释放才可以进行操作,给表增加索引会会触发为现有数据重建索引

    15630

    图解 Git 工作原理,彻底说清楚!!!

    — 1 — 基本用法 上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 git add files把当前文件放入暂存区域。 git commit给暂存区域生成快照并提交。...结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。 Cherry Pick cherry-pick命令“复制”一个提交节点并在当前分支做一次完全一样的新提交。...本质上,这是线性化的自动的 cherry-pick。 上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。...树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。...嵌入式中状态机的几种骚操作 没有串口,如何打印单片机调试信息?

    39410

    图解Git

    上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 git add files把当前文件放入暂存区域。 git commit给暂存区域生成快照并提交。...git commit. git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。...结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。 ? Cherry Pick cherry-pick命令"复制"一个提交节点并在当前复制做一次完全一样的新提交。 ?...本质上,这是线性化的自动的 cherry-pick ? 上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。...树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。

    77180

    21张图,将 Git 工作原理彻底说清楚…

    git commit. git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。...这样,分支指向不变,但是索引会回滚到最后一次提交,如果用—hard选项,工作目录也同样。 如果给了文件名(或者-p选项), 那么工作效果和带文件名的checkout差不多,除了索引被更新。...结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。 Cherry Pick cherry-pick命令”复制”一个提交节点并在当前复制做一次完全一样的新提交。...本质上,这是线性化的自动的 cherry-pick 上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。...树对应着工作目录中的文件夹,树中包含的 树或者 blob 对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。

    73221

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券