- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 NSTreeController 和绑定(bind)将基于 View 的 NSOutlineView 连接到我的模型。
我的模型由一个主 Node 类(及其子类)组成。每个节点可以有 0 个或多个子节点。出于性能原因,我将子项存储在 C 数组(节点对象)中。我定义了我的 NSTreeController 的 childrenKeyPath
、countKeyPath
和 leafKeyPath
属性,并在我的 Node 类中实现了它们:
- (NSArray *)childNodes {
return [NSArray arrayWithObjects:children_ count:childCount_];
}
- (BOOL)nodeIsLeaf {
return childCount_ < 1;
}
- (NSUInteger)childCount {
return childCount_;
}
当我添加一个新的 child 时,我在插入之前调用[self willChangeValueForKey:@"childNodes"]
,在插入之后调用[self didChangeValueForKey:@"childNodes"]
C 数组。
我按照文档中的描述设置了绑定(bind)。(我将 NSTreeController 的内容对象绑定(bind)到我的根节点。我将 NSOutlineView 的内容绑定(bind)到 NSTreeController 的 arrangedObjects。我还将 NSTextField 绑定(bind)到 NSTableViewCell 的 objectValue.name 属性)
初始配置(根对象及其子对象)在运行应用程序时加载良好。我还可以向根对象添加新的子对象。
但是,当我尝试向任何还没有子节点( 根除外)添加新子节点(没有显示三角形)时,NSOutlineView 不会更新(仍然没有三角形)。新节点被正确插入到模型中并发送了 will/didChangeValue 消息,但 NSTreeController 不会费心检查新的子数组。在这种情况下,记录上面的 3 个 keyPath 函数不会打印任何内容。
如果我关闭父节点并再次展开它,则会重新加载节点,显示三角形,我可以展开节点以查看我刚刚添加的新节点。为什么 NSTreeController 不检查更改,即使我在更改子数组时发送了 KVO 消息?
最佳答案
好的,这样就可以了:
/* item is the item which has just had new children added */
[_outlineView reloadItem:[_outlineView parentForItem:item] reloadChildren:YES];
它可能效率低下,甚至可能在 Mountain Lion 中修复,但这对我有用。您可以将需要执行此操作的次数限制为项目从 0 -> 1 个 child (反之亦然?)。
关于objective-c - NSOutlineView 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10481886/
根据Apple's documentation , NSOutlineView 要求 View 中的每个项目都是唯一的,但是,如果这实际上不符合业务需求怎么办?特别是,如何显示这样的内容 Item A
我有一个基于 View 的 NSOutlineView,我正在努力使项目可编辑。如果我单击一个项目来编辑它,它将从我单击的插入点开始,而不是选择整个文本。按 Enter/Return 进行编辑会选择整
我有一个带有复选框的 NSOutlineView。我将复选框状态绑定(bind)到带有键 shouldBeCopied 的节点项。在节点项中,我有 getter 和 setter,如下所示: -(BO
获得一个在 Controller 的 awakeFromNib 中配置的 NSOutlineView,带有数据源和自动保存的扩展节点。 一切都像魅力一样工作。 问题是在某个地方,有人也在保存滚动位置的
我阅读了关于 Outlineviews 和 DND 的另一篇文章,但我无法让我的程序运行。这篇文章的底部是我的项目 zip 的链接。它非常基本,只有一个大纲 View 和按钮。我希望它接收放置在其上的
我正在尝试将项目的实际折叠/展开状态存储在 NSOutlineView 中,以便稍后可以恢复。 NSOutlineViewDelegate 上有两种方法可用: outlineViewItemDidEx
我最近在没有帐户的情况下启动了另一个线程,因此我使用帐户在此处重新发布问题,以便我可以编辑该程序的当前链接,以便其他用户可以关注此问题。我还更新了下面的代码。这是我原来的问题: 我阅读了关于 Outl
看起来我的数据模型有一些问题,所以我时不时会收到此错误展开项目时。有谁知道这个断言意味着什么? 2010-10-20 03:04:47.547 test_tree[60332:613] * -NSOu
我正在尝试创建一个简单的文件夹浏览器,使用 NSOutlineView 显示树结构。将 monoMac 和 Xamarin Studio 与 XCode 界面生成器一起用于 UI。 我现在遇到的问题是
我有一个用 C# 编写的 MonoMac/Xamarin.MAc 项目。在其中,我有一个派生自 NSOutlineView 的自定义类,它显示某些项目的上下文菜单。通过这样做,而不是仅仅分配 Menu
我有一个简单的 NSOutlineView,通过 swift 初始化,有 2 列。我制作了以下非常简单的数据源,希望通过这种方式进行测试,但也许我这种格式是不允许的。我假设 TableView 仅根据
我想显示一个简单的 nsoutlineview 来显示层次结构。 当我通过 InterfaceBuilder 完成此操作时,一切都很好,但现在我尝试以编程方式进行操作,却遇到了一些麻烦。 这里是我用来
我正在开发一个应用程序,该应用程序需要一个源列表,例如在 Finder 中找到的源列表。到目前为止,我已经让核心数据与 NSOutlineView 一起使用,但组标题看起来不太像源列表。真实的源列表组
我想获取/设置NSOutlineView的选择索引路径。我该怎么做? 没有明显的方法来获取/设置选择索引路径。 如果您尝试绑定(bind)选择索引路径,并且没有将它们绑定(bind)到树 Contro
我创建了一个基于 View 的 NSOutlineView ,其中包含图像和徽章(内联按钮)。虽然自定义单元格足够宽,但我遇到以下问题: 因此,右侧有一个奇怪的边距覆盖了我的徽章(NSOutlineV
我有一个 NSOutlineView,上面有几个项目。每人有 3 个 child (地点、照片和社交)。他们都有相同的 child 。假设用户选择了地点,有谁知道我如何检测哪个项目是所选项目的父项?
我对此感到很难过。当涉及到基于 NSOutlineView 的 View 的对象持久性时,我遇到了非常奇怪的行为。目前我有一个对象,其中包含一个 object1 数组,该对象包含一个 object2
我正在使用基于 View 的 NSOutlineView 来创建源列表。NSOutlineView 连接到数据源和委托(delegate)对象。 但是,我似乎找不到需要实现的内容才能利用部分标题(例如
我正在尝试实现一个带有渐变背景的 NSOutlineView 子类: - (void)drawBackgroundInClipRect:(NSRect)clipRect { [gradient
我遇到了一个非常奇怪的问题: 我将 NSOutlineView 设置为 NSTableViewSelectionHighlightStyleSourceList。在某些情况下,第二级不缩进并与根节点显
我是一名优秀的程序员,十分优秀!