问题标签 [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.
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:
消息来访问它们。
cocoa - NSOutlineView 在内容更新时跳到顶部
我有一个NSOutlineView
显示目录层次结构的。它绑定到一个NSTreeController
,它绑定到我管理文件系统节点的类。当文件系统事件发生时,我会在children
keypath 上触发 KVO 通知,这会导致大纲视图更新。但是当它更新时,它突然向上滚动到最顶部。我希望滚动位置保持不变。有任何想法吗?
以下是发生 FS 事件时运行的代码:
这是在模型中,所以我无法访问视图。
objective-c - 树的 KVC 访问器模式
在本文档中,Apple 描述了 To-One 和 To-Many 属性的访问器模式。多对多属性涵盖索引和无序集合。
这让我想到了一个问题:
树结构是否有不同的访问器模式,或者我们应该使用(或适应)与其他类型的集合相同的访问器模式?
显然,当NSArray
持有树结构绑定到NSTreeController
. 模型正在正确更新,例如在添加/删除元素或更改它们的顺序时,但从未调用访问器实现。
我在这里错过了什么吗?
objective-c - NSTreeController:如何找到节点的父节点?
我正在寻找一种类似的方法:NSOutlineView
parentForItem:
对于 NSTreeController。
我需要知道树中节点的父节点。
sprite-kit - 为什么 SKNode 中的 -removeFromParent 会抛出此异常?
例外是:
-[__NSArrayI removeExactObject:]: 无法识别的选择器发送到实例
我想在 a 中有一个 a 的表示SKScene
,NSTreeController
因为我正在使用一个对 a及其代理子Proxy
级具有强引用的类,该类的每个实例又被用作树控制器中的表示对象.SKNode
Proxy
所有节点都通过 Proxy 类中的这些方法添加或删除到场景中
这是我用场景填充树控制器的方法
问题是,当树控制器尝试从其父节点中删除代理节点时,SKNode
会抛出上面的异常
这就是我删除代理节点的方式
cocoa - 从 NSOutlineView 或 NSTreeController 中移除 NSElements
我如何才能在 NSOutlineView 中绑定到由 NSXMLDocument 驱动的 NSTreeController,只显示一些 NSElement(相同类型)而不显示其他?
谢谢
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 中以编程方式完成的。
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 编程也足够新,我可能错过了一些东西。
任何人都可以看到我正在尝试做的事情的问题吗?
cocoa - NSTreeController - 检索选定的节点
我在 bookController (NSCreeController) 中添加了 Book 对象。现在我想在选择行时获取存储的 Book 对象。
objective-c - NSTreeController:自定义属性键路径的 KVO 失败。
设置
我有一个NSTreeController
子类。它有一个名为的属性selectedProject
,它是自定义的,并在标题中声明如下:
在私有实现中就像这样:
至关重要的是,在我selectedProject
在 TreeController 中修改的每一个点,我都会检查生成的 setter/getter。我从不直接修改 iVar。
基本上,这个属性存在的原因是因为没有键入的 normalselectedObjects
和selection
properties,NSTreeController
而且我知道这个 TreeController 将始终只管理 LPProject 对象并且一次只能选择一个项目,我想要一个干净的 iVar使用,而不是不断获取 selectedObjects,检查是否有,获取数组中的第一个对象等。
LP项目
LPProject
是NSManagedObject
Core Data 的自定义子类。它有一个名为 的属性enabled
。此属性是一个 BOOL,由 NSNumber 表示。它的 getter/setter 由 Xcode 生成。
问题
在几个控制器中,我尝试观察对象的enabled
属性selectedProject
,如下所示:
我已经验证了 KVO 通知在selectedProject
更改时到达(并因此selectedProject.enabled
发生更改)。但是,当只有enabled
属性发生变化时selectedProject
(即选定的项目本身保持不变),KVO 通知不会到达。
但是,如果我改为以这种方式订阅:
它完美地工作。当enabled
更改并selectedProject
保持不变时,KVO 通知到达。
我对此感到困惑,因为selectedProject
它符合 KVO,而且我觉得 keypath.enabled
应该可以工作。
任何人都可以阐明这一点吗?我错过了什么?