更新 NSOutlineView 的内容

Posted

技术标签:

【中文标题】更新 NSOutlineView 的内容【英文标题】:Update content of NSOutlineView 【发布时间】:2012-11-08 22:49:23 【问题描述】:

我有一个 NSOutlineView,它显示由我绑定到 NSMutableArray (arrayOfFiles) 的 NSTreeController 控制的内容。该数组包含 NSTreeNode 对象,其中代表对象(Fileobject 类)包含许多 ivars。我想为特定对象编辑和更新名为“direction”的 ivar。我设法使用为每个对象存储的 NSIndexPath 来获取我感兴趣的对象。

[self.myOutlineViewController.myTreeController setSelectionIndexPath:myIndexPath];

Fileobject *myObject =[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject];

[myObject setDirection:0];

这很好用,但是当我想更新刚刚在 NSIndexPath 提取的对象时遇到了问题。以下崩溃:[self.myOutlineViewController.myTreeController removeObjectAtArrangedObjectIndexPath:myIndexPath]; 带有错误消息

An uncaught exception was raised
2012-11-08 17:23:25.557 S3access[20379:12b03] *** -[NSKeyValueSlowMutableArray     removeObjectsAtIndexes:]: value for key myArrayOfFiles of object 0x40012e460 is nil

我知道我在这里对Key-Value coding 做错了,但我看不到它是什么。我试图在 Apple 的所有示例中寻求解决方案,但我只能找到不使用 NSTreeController 和 NSTreeNode 的示例。我的想法是 1) 在 indexpath 中提取对象 2) 编辑提取的对象 3) 在 indexpath 中删除当前对象 4) 使用命令 [self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath]; 将我新编辑的对象插入 indexpath。当我不只替换 ivar 而是替换整个对象时,我看不到如何使用键值编码替换我的对象?

任何关于我做错了什么的建议以及我如何解决这个问题的建议都非常感谢。

干杯,谢谢!特隆德

【问题讨论】:

【参考方案1】:

我终于设法让我的 NSOutlineView 更新正常工作,因为我的问题是一个极端的风滚草,我想我至少会更新一个答案。事实证明,我的问题更多是缺乏对 KVC 的正确理解,而不是编程问题。在阅读了有关 *** 和Apple documentation 的问题的答案后,我终于弄清楚了如何启用我的 NSOutlineView 及其使用 NSTreeNode 表示的 NSTreeController 内容(arrangedObjects)的动态更新。假设您知道对象的 NSIndexPath (myIndexPath),以下代码对我有用:

[self.myOutlineViewController.myOutlineView willChangeValueForKey:@"direction"];
[[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject] setDirection:0];
[self.myOutlineViewController.myOutlineView didChangeValueForKey:@"direction"];

希望这可能对其他人有所帮助。干杯,特隆德

【讨论】:

以上是关于更新 NSOutlineView 的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地展平 NSOutlineView?

NSTableView 和 NSOutlineView 拖放

从 NSOutlineView 中拖放

NSOutlineView 侧边栏帮助

编辑 NSOutlineView 项目后使用委托

NSOutlineView 不折叠项目