1

我有一个 NSOutlineView 显示由 NSTreeController 控制的内容,我将其绑定到 NSMutableArray (arrayOfFiles)。该数组包含 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

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

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

干杯,谢谢!特隆

4

1 回答 1

1

我终于设法让我的 NSOutlineView 更新正常工作,因为我的问题是一种极端的风滚草,我想我至少会更新一个答案。事实证明,我的问题更多是缺乏对 KVC 的正确理解,而不是编程问题。在阅读了有关 Stackoverflow 和Apple 文档的问题的答案后,我终于弄清楚了如何启用我的 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"];

希望这可以帮助其他一些人。干杯,特隆德

于 2012-11-26T04:01:40.133 回答