当我尝试将孩子插入NSTreeController
时,为什么会出现此崩溃错误?
NSTreeController *tree = [NSTreeController new];
NSTreeNode *node1 = [NSTreeNode treeNodeWithRepresentedObject:@{ @"type": @"shirt" }];
// The below method causes mysterious crash
[tree insertObject:node1 atArrangedObjectIndexPath:[NSIndexPath indexPathWithIndex:0]];
Xcode说:
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'[object class:NSMutableDictionary]无法执行操作,因为childrenKeyPath为nil' *
为什么会导致此错误?什么是childrenKeyPath以及我为什么需要它(我没有使用界面构建器)?
答案 0 :(得分:2)
我在这里犯了几个错误。您不应将NSTreeNode
类型的实例插入NSTreeController
insertObject
。您可以使用insertObject
插入模型对象,此时NSTreeNode
将自动为其创建。
此外,在模型对象中,您需要拥有一个设置为NSMutableArray
的属性或键。然后,在插入任何模型对象之前,将childrenKeyPath
的{{1}}属性设置为等于该属性或键的名称。
这是因为NSTreeController
和NSTreeController
并非设计用于保存数据或子对象本身,而是作为模型的简单但有用的“地图”你创建并保留。
我希望这些信息对其他人有所帮助,因为StackOverflow的其余部分对它有些奇怪的沉默......