Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTreeNode mutableChildNodes没有正常工作?_Objective C_Cocoa_Nstreecontroller - Fatal编程技术网

Objective c NSTreeNode mutableChildNodes没有正常工作?

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插入子节点的可变数组中。代码如下:

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)
这些错误似乎是在处理KVO内容。有人在使用mutableChildNodes时遇到过这样的错误吗?非常感谢您的帮助


注意:底层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方法,它成功了!尽管如此,因为它是一个私有类(不存在头文件?),所以我对使用它有点犹豫,并且我不确定直接使用这个类会产生什么副作用。有没有人在使用无文档类时有过不好的经历?我认为这些类在未来的版本中可能会有很大的变化。还有谁知道在哪里可以找到关于这个类的文档?