Objective c NSTreeNode mutableChildNodes没有正常工作?
我完全不明白为什么这不起作用。我正在尝试将新的NSTreeNode插入子节点的可变数组中。代码如下:Objective c NSTreeNode mutableChildNodes没有正常工作?,objective-c,cocoa,nstreecontroller,Objective C,Cocoa,Nstreecontroller,我完全不明白为什么这不起作用。我正在尝试将新的NSTreeNode插入子节点的可变数组中。代码如下: NSTreeNode *newNode = [[NSTreeNode alloc] init]; NSMutableArray *children = [anExistingParentTreeNode mutableChildNodes]; [children addObject:newNode]; 执行时,我会遇到各种各样的错误: -[NSCFSet initWithObjects:计数
NSTreeNode *newNode = [[NSTreeNode alloc] init];
NSMutableArray *children = [anExistingParentTreeNode mutableChildNodes];
[children addObject:newNode];
执行时,我会遇到各种各样的错误:
- -[NSCFSet initWithObjects:计数:]:尝试在对象[0]处插入nil对象
- -[NSTreeNode\u teardown]:发送到实例0x2000bff40的无法识别的选择器
- 严重的应用程序错误。在核心数据更改处理过程中捕获异常:-[NSTreeNode\u tearDownOwnObserving]:将无法识别的选择器发送到实例0x2000bff40,并带有userInfo(null)
注意:底层NSTreeController通过托管对象上下文绑定到核心数据。可能是您没有正确初始化
新节点
对象吗
为类定义的唯一init
方法是:
- (id)initWithRepresentedObject:(id)modelObject
使用init
时,只需使用从NSObject
继承的默认实现
通常,一个类有一个或多个指定的初始值设定项,但是在NSTreeNode
的情况下,我看不到它是在文档中指定的。但是,由于该类只定义了一个初始值设定项,并且没有setter方法在稍后阶段设置表示的对象,因此我认为initWithRepresentedObject:
是该类的指定初始值设定项
关于初始值设定项:请参阅我对原始问题的最后一点评论。感谢您的回答,但我尝试了所有NSTreeNode初始值设定项,根据一系列NSLog语句,该对象是活动且健康的。当我尝试将其添加到可变数组时,问题就出现了。因此,在深入研究之后,我意识到NSTreeController和NSTreeNode在代理方面存在许多问题。因此,我认为mutableChildNodes为我提供了一个代理数组,因为当将新节点添加到数组中时,我得到了相同数量的:
-[NSTreeNode\u tearDownObserving]:未识别的选择器发送到实例0x2000957a0
,因为我在树中有节点。我跟踪了这个类,它声明它是NSTreeControllerTreeNode。所以这对我来说是个谜。经过进一步挖掘,NSTreeNode的mutableChildNodes方法返回一个NSTreeControllerTreeNode的可变数组,它似乎是NSTreeNode的一个未记录的私有子类。我反编译了appkit,试图获取关于这个类的任何信息。我看到NSTreeControllerTreeNode有一个方法-(id)[NSTreeControllerTreeNode initWithRepresentedObject:treeController:
。我向前声明了class@NSTreeControllerTreeNode
,并尝试了上面的init方法,它成功了!尽管如此,因为它是一个私有类(不存在头文件?),所以我对使用它有点犹豫,并且我不确定直接使用这个类会产生什么副作用。有没有人在使用无文档类时有过不好的经历?我认为这些类在未来的版本中可能会有很大的变化。还有谁知道在哪里可以找到关于这个类的文档?