更新NSOutlineView的内容

时间:2012-11-08 22:49:23

标签: objective-c macos cocoa nsoutlineview nstreecontroller

我有一个NSOutlineView,显示由NSTreeController控制的内容,我绑定到NSMutableArray(arrayOfFiles)。该数组包含NSTreeNode对象,其中representObject(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)在索引路径中提取对象2)编辑提取的对象3)在索引路径处删除当前对象4)使用命令[self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath];将我的新编辑对象插入索引路径。当我不仅仅替换一个ivar而是整个对象时,我不知道如何使用Key-Value编码替换我的对象?

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

干杯,谢谢!特朗德

1 个答案:

答案 0 :(得分:1)

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

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

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