问题标签 [nstreecontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nsoutlineview - NSTreeController setcontent 可以与 NSXMLDocument 一起使用吗?
我正在尝试在大纲视图中显示一个简单 plist (xml) 文件的内容。
一旦我在 NSXMLDocument 或 NSDictionary 中获得了文件数据,是否可以只使用这个现有结构来填充 TreeController?我能找到的所有代码示例都会解析并重建所有节点和内容。这不是已经在 NSXMLDocument 中建立了吗?
谢谢
抢
objective-c - 显示 NSArrays 的 NSDictionary 最好的是什么?
我有一个NSDictionary
每个键都指一个NSArray
对象,我想在 mac OSX 10.5 上的 Cocoa APP 上显示内容,最好的解决方案是什么?
也许NSTreecontroller
?
cocoa - 给定模型对象,如何在 NSTreeController 中找到索引路径?
给定表示的模型对象NSTreeController
,如何在树中找到它们的索引路径并随后选择它们?这似乎是一个非常明显的问题,但我似乎找不到任何参考。有任何想法吗?
objective-c - NSTreeController 没有设置核心数据子属性
我的 NSTreeController 正在设置 Core Data 父属性而不是子属性。
我有一个像这样的核心数据模型
然后我用 NSOutlineView 和 NSTreeController 显示它。我使用方法 -[NSTreeController insertObject:atArrangedObjectIndexPath:] 尝试插入 Leaf,叶子的父属性设置正确,但父 Group.children 属性仍然设置为 nil。
当我运行项目时,我在控制台上收到以下警告
即使在接口生成器中设置了 childrenKeyPath,为什么当我有一个 NSManagedObject 子类 SavedItem、SavedGroup 和 SavedLeaf 时它使用 NSMutableDictionary。我已经下载了几个示例,但我看不到他们在做什么,而我不是。
objective-c - 在 NSTreeController 或 NSOutlineView 中获取对象的 NSIndexPath 的干净方法?
仔细阅读文档后,我找不到相当简单的方法来获取对象的索引路径NSOutlineView
或NSTreeController
它绑定到的对象。结果,当我需要做一些需要它们的事情(例如,从树中删除特定项目)时,我最终编写了非常丑陋的代码,试图自己组装索引路径。
没有比这更好的方法了[[NSIndexPath indexPathWithIndex:<blah>] indexPathByAddingIndex: <blah>]
吗?
core-data - 使用两个 NSTreeController、核心数据和绑定的主 - 详细应用程序
我在尝试使用 Master (NSOutlineView+NSTreeController) 和 Detail (NSOutlineView+NSTreeController) 设置执行 Master-Detail 应用程序时遇到问题。
这是一个基于 Apple 抽象树示例应用程序的最简单应用程序。
https://s3.amazonaws.com/applicationtests/AbstractTree-MasterDetail.zip
我基本上有一个使用树节点的左项目浏览器,以及显示依赖于项目浏览器选择的细节树的右细节浏览器。
我的设置很简单。
Master NSOutlineView 绑定到 Master NSTreeController 处理一个 CoreData 实体项目节点。Detail NSOutlineView 绑定到 Detail NSTreeController 处理一个 CoreData 实体 Detail Node。
两者都是树。
项目节点实体与细节节点有关系,允许项目树根据选择显示细节树。
我遇到的问题是当我将 Detail NSTreeController 中的 contentObject 绑定到 Master NSTreeController 选择时:
Detail NSTreeController contentObject 绑定到 Master NSTreeController selection.detailNode
每次我更改主树大纲视图中的选择时,细节 NSTreeController 都会创建一个永远不会被释放的 NSTreeControllerTreeNodes。
基本上,每次主控制器选择更改时,细节 NSTreeContrller 都会创建一组新的新 NSTreeControllerTreeNode 对象,这些对象永远不会被释放。
查看 Instruments Allocation 工具,每次更改选择时都会创建新节点。即使删除了所有主节点,节点仍然被分配。
我试图准备一个 NSViewController 来重新加载一个带有主控制器选择更改的新 nib 文件,但这对我来说似乎是一个很大的开销。
当 contentObject 绑定更改为另一个值时,有人知道如何处理创建的 NSTreeControllerTreeNodes 吗?
谢谢。
cocoa - NSOutlineView 通过绑定进行分组
这是一个最佳实践问题,因为我可以想到一些可行的方法。
我想实现一个大纲视图。假设我想在 OmniFocus 中实现一个(我的目标非常相似):
(我指的是该屏幕截图主窗格中的大纲视图,而不是侧边栏。)
所以我的数据类型是一个任务。任何任务都可以有子任务。每个任务都有一个或零个父任务。用于在大纲视图中显示的经典数据模型,对吧?
但!我想为用户提供通过他们选择的属性直观地对这些任务进行分组的能力。他们可以按里程碑、分配的用户或组件对它们进行分组……会有很多这样的。并且这个分组应该出现在大纲视图中,在层次结构的顶层,就像这个 OmniFocus 屏幕截图中的“收件箱”、“家庭”和“工作”项目一样。
所以很明显,要显示分组,我应该使用内置的 NSOutlineView 方法来绘制组单元:outlineView:isGroupItem:
委托方法。问题是,此设置假设大纲视图中的每个项目都由我连接到的任何数据模型中的项目表示:因此我的任务和我的组标题都必须在数据模型中表示。
因此,只绑定到代表我的任务的核心数据表是不行的。我可以完全放弃绑定,而只是回到旧式数据源方法,但是我失去了一堆有用的东西。那么有中间立场吗?
例如,我可以创建另一个类TaskTemporaryGroup
。我给该类一个 ivar NSSet ,即subtasks
与可用于获取其子项的任务的键路径相同。然后我可以将我的一组 TaskTemporaryGroup 对象绑定到一个树控制器,它会安排整个树,而不管顶层项目与较低级别的项目是不同的类。在实现拖放时,我必须小心,以确保不能随意拖动分组行,但它可能会起作用。
另一个争论点是我想点击表格标题来对每个组中的行进行排序,而不是对顶级组进行排序。我假设 NSTreeController 将排序描述符应用于层次结构的每个级别?对于我希望能够对其余单元格进行排序的任何关键路径,我可以让我的 TaskTemporaryGroup 类返回相同的东西(即,它所需的排序顺序,我已经单独计算),以便框架无论按什么属性对它们进行排序,它们看起来都保持相同的顺序。这是一个好方法还是一个黑客?
所以,总结一下:
- 人们如何建议我实现这种层次结构,其中顶层是一个特例,所有后续级别都是同一种对象?
- 我描述的方式,用一个类来表示碰巧响应与子对象相同的关键路径的顶级对象,是一个好方法吗?
- 有没有人有关于如何在这种情况下使排序正常工作的任何提示?
- 或者尝试使用绑定来完成这项任务会给我带来伤害吗?
谢谢,
艾米
objective-c - 使用 NSTreeController,更改模型数组时是否必须手动重新加载 NSOutlineView?
我有一个树状模型,我想使用 NSTreeController 在 NSOutlineView 中显示。
只要我使用 NSTreeController 的插入和删除函数来更改我的模型树,我就能够设置绑定并且一切正常。如果我尝试直接从模型树中插入或删除,在某些情况下 NSOutlineView 不会更新。
如果我将一个对象插入到扩展的对象组中,它会起作用:
但是,如果我尝试将第一个对象添加到之前没有子节点的节点,则不会发生任何事情。显示三角形没有出现,所以我无法展开它来查看新节点。
如果我用一个新对象将鼠标悬停在那个节点上,它就会展开,我可以毫无问题地添加第二个孩子。但是三角形仍然是不可见的:
最后,如果我关闭所有这些节点的父节点并再次打开它们(触发重新加载),三角形会突然出现:
这就是为什么我想知道是否必须手动重新加载 NSOutlineView 的行以使三角形可见,或者我是否搞砸了什么?谢谢!!
更新:
在我的 Node 类中,我添加了一个像这样的新孩子:
我也实现了这些(我在 IB 中为我的 NSTreeController 设置):
我知道这(尤其是childNodes
)不是很优化,但我目前只是在试验,因为在最终版本中,我的孩子将存储在 C 数组中。
更新 2:
我也尝试为其他 2 个属性发送 KVO 通知,但这也无济于事。
objective-c - 在没有 NSTreeController 的模型更改时自动更新 NSOutlineView
如果我将 NSOutlineView 从使用绑定和 NSTreeController 更改为拥有数据源和委托,如果我的模型树发生更改,我将如何自动更新 NSOutlineView?我是否应该使用控制器观察树中每个节点的 childNodes 属性并在发生更改时触发重新加载?还是有其他方法?
cocoa - 如何不在大纲视图中显示某些节点?
在 Apple 的 Mail 应用程序中,在左侧的大纲视图中,收件箱或文件夹以层次结构显示,但文件夹或电子邮件中的电子邮件根本不显示。
我想重现此功能。
我有一个连接到树控制器的大纲视图。对象(节点)被添加到树控制器并显示在大纲视图中。如何防止某些对象出现?具体来说,我有包含自定义对象实例的文件夹节点。就像在 Mail.app 中一样,我只想在大纲视图中显示文件夹,并将自定义对象显示在另一个视图中。
根据要求提供一些控制器代码;在这里,我将节点添加到在大纲视图中选择的 folderNode: