问题标签 [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.

0 投票
1 回答
756 浏览

xcode - 如何在 Interface Builder 中配置 NSTreeController

当我NSTreeController在 Interface Builder 中选择一个(在 Xcode 4.6.3 中)并查看属性检查器时,我看到名为 Tree Controller 和 Object Controller 的两个部分。树控制器部分有一定的意义,但我很难找到对象控制器部分的解释。第一项是“模式”,带有选项“类”和“实体名称”,我认为您在使用 Core Data 时使用后者,而在不使用时使用前者。我没有使用核心数据。那么,下一项 Class Name 的含义是什么?它默认为NSMutableDictionary,但我认为标准的树节点类型是NSTreeNode。具体来说,如果我希望我的树节点是一个NSTreeNode其表示的对象是一个NSMutableDictionary,我将如何填写对象控制器部分?


回答后事后思考:虽然我现在看到可以使用类型的节点NSMutableDictionary来构建大纲视图的内容树,但创建NSTreeNode. 首先,NSTreeNode自动跟踪父链接,这在某些情况下很有用。其次,我可以将我的数据成员定义为属性,然后使用点符号而不是objectForKey:消息来访问它们。

0 投票
2 回答
615 浏览

cocoa - NSOutlineView 在内容更新时跳到顶部

我有一个NSOutlineView显示目录层次结构的。它绑定到一个NSTreeController,它绑定到我管理文件系统节点的类。当文件系统事件发生时,我会在childrenkeypath 上触发 KVO 通知,这会导致大纲视图更新。但是当它更新时,它突然向上滚动到最顶部。我希望滚动位置保持不变。有任何想法吗?

以下是发生 FS 事件时运行的代码:

这是在模型中,所以我无法访问视图。

0 投票
1 回答
101 浏览

objective-c - 树的 KVC 访问器模式

本文档中,Apple 描述了 To-One 和 To-Many 属性的访问器模式。多对多属性涵盖索引和无序集合。

这让我想到了一个问题:
树结构是否有不同的访问器模式,或者我们应该使用(或适应)与其他类型的集合相同的访问器模式?

显然,当NSArray持有树结构绑定到NSTreeController. 模型正在正确更新,例如在添加/删除元素或更改它们的顺序时,但从未调用访问器实现。

我在这里错过了什么吗?

0 投票
1 回答
390 浏览

objective-c - NSTreeController:如何找到节点的父节点?

我正在寻找一种类似的方法:NSOutlineView parentForItem:对于 NSTreeController。

我需要知道树中节点的父节点。

0 投票
1 回答
82 浏览

sprite-kit - 为什么 SKNode 中的 -removeFromParent 会抛出此异常?

例外是:

-[__NSArrayI removeExactObject:]: 无法识别的选择器发送到实例

我想在 a 中有一个 a 的表示SKSceneNSTreeController因为我正在使用一个对 a及其代理子Proxy级具有强引用的类,该类的每个实例又被用作树控制器中的表示对象.SKNodeProxy

所有节点都通过 Proxy 类中的这些方法添加或删除到场景中

这是我用场景填充树控制器的方法

问题是,当树控制器尝试从其父节点中删除代理节点时,SKNode会抛出上面的异常

这就是我删除代理节点的方式

0 投票
1 回答
200 浏览

cocoa - 从 NSOutlineView 或 NSTreeController 中移除 NSElements

我如何才能在 NSOutlineView 中绑定到由 NSXMLDocument 驱动的 NSTreeController,只显示一些 NSElement(相同类型)而不显示其他?

谢谢

0 投票
1 回答
724 浏览

objective-c - 如何动态更新 NSTreeController 和 NSOutlineView?

当一个 outlineViewItem 展开时 -

-,我能够成功地将对象添加到 TreeController(日志语句显示新添加的对象在层次结构的正确位置),但 OutlineView/UI 没有更新以反映该插入。

没用,我用过

  • [self.outlineView reloadItem:nil reloadChildren:YES],

  • [self.outlineView reloadData], 乃至

  • [self.outlineView setHidden:YES]然后
    [self.outlineView setHidden:NO]

尝试强制重新加载结构。

这一切都是在 Objective-C 中以编程方式完成的。

0 投票
1 回答
138 浏览

macos - 通过一对一关系绑定时文档关闭时崩溃

构建环境:Xcode 7 beta 7 OS X:10.10.5 Swift 2

我有一个项目使用来自 github 的 BSManagedDocument 类将核心数据包装到 NSDocument 中。我正在使用 Cocoa 绑定将数据从核心数据获取到使用 NSTree 控制器的 NSOutlineView。

对象模型相当简单。绑定到树控制器的对象(称为 SourceGroup_)与其自身具有一对多关系,为树控制器提供分层数据。它还与提供 URL 的 Media 对象具有可选的一对一关系相关媒体(图像、视频等)。

大纲视图绑定了三列,两列绑定到主对象的属性,而第三列是来自一对一媒体关系的缩略图。

一切都显示得很好,但是当我关闭文档时,我在 _NSGetUsingKeyValueGetter 中得到了一个 EXC_BAD_ACCESS,它通过 NSAutoUnbinder 和 [NSTableCellView release] 返回到 [NSAutoreleasePool drain]。这不是每次都会发生,但偶尔会发生。

我删除了通过一对一关系绑定的列,它永远不会崩溃。如果我在 SourceGroup 上添加一个非核心数据属性,它只是从首选媒体关系返回图像,然后绑定到 SourceGroup 上的该属性,它永远不会崩溃。

字段的类型无关紧要。如果我通过关系绑定,它(有时)会在关闭时崩溃,无论是 String 还是 NSImage。

我什至尝试将我的核心数据对象生成为 Objective C 而不是 Swift,但这对行为没有任何影响。无论我如何更改一个常量,如果我通过关系绑定表列中的视图,它有时会在关闭时崩溃。然而,在细节方面,如果我通过 selectionIndex 绑定到相同的字段,它可以正常工作并且永远不会崩溃。只有在大纲视图中才会发生崩溃。

我知道描述可能有点模糊,所以我准备了一些截图,不幸的是我似乎缺乏足够的声誉来分享它们。我将尝试描述设置。

树控制器处于实体模式,实体设置为 SourceGroup。它的源描述符和托管对象上下文绑定到我的视图控制器。

大纲视图的内容绑定到树控制器的arrangedObjects 控制器键。selectionIndexPaths 和排序描述符也绑定到树控制器。

列中 NSImageView 的值绑定到表格单元格视图,模型键路径设置为 objectValue.preferredMedia.thumbnail。

这一切都正确显示,但会导致关闭文档时出现间歇性问题。如果我将缩略图图像属性放入 SourceGroup 然后将该图像视图绑定到 objectValue.thumbnail 我永远不会看到问题

我在文档中没有看到任何关于这种设置的问题,但我对 OS X 编程也足够新,我可能错过了一些东西。

任何人都可以看到我正在尝试做的事情的问题吗?

0 投票
1 回答
202 浏览

cocoa - NSTreeController - 检索选定的节点

我在 bookController (NSCreeController) 中添加了 Book 对象。现在我想在选择行时获取存储的 Book 对象。

0 投票
1 回答
134 浏览

objective-c - NSTreeController:自定义属性键路径的 KVO 失败。

设置

我有一个NSTreeController子类。它有一个名为的属性selectedProject,它是自定义的,并在标题中声明如下:

在私有实现中就像这样:

至关重要的是,在我selectedProject在 TreeController 中修改的每一个点,我都会检查生成的 setter/getter。我从不直接修改 iVar。

基本上,这个属性存在的原因是因为没有键入的 normalselectedObjectsselectionproperties,NSTreeController而且我知道这个 TreeController 将始终只管理 LPProject 对象并且一次只能选择一个项目,我想要一个干净的 iVar使用,而不是不断获取 selectedObjects,检查是否有,获取数组中的第一个对象等。


LP项目

LPProjectNSManagedObjectCore Data 的自定义子类。它有一个名为 的属性enabled。此属性是一个 BOOL,由 NSNumber 表示。它的 getter/setter 由 Xcode 生成。


问题

在几个控制器中,我尝试观察对象的enabled属性selectedProject,如下所示:

我已经验证了 KVO 通知在selectedProject更改时到达(并因此selectedProject.enabled发生更改)。但是,当只有enabled属性发生变化时selectedProject(即选定的项目本身保持不变),KVO 通知不会到达。

但是,如果我改为以这种方式订阅:

它完美地工作。当enabled更改并selectedProject保持不变时,KVO 通知到达。

我对此感到困惑,因为selectedProject它符合 KVO,而且我觉得 keypath.enabled应该可以工作。

任何人都可以阐明这一点吗?我错过了什么?