1

当我尝试将孩子插入我的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”而终止应用程序,原因:“[对象类:NSMutableDictionary] 无法执行操作,因为 childrenKeyPath 为 nil”*

为什么会导致此错误?什么是 childrenKeyPath,我为什么需要它(我没有使用界面生成器)?

4

1 回答 1

2

我在这里犯了几个错误。您不应将 type 的实例插入NSTreeNodewithNSTreeControllerinsertObject。您用于insertObject插入模型对象,此时NSTreeNode自动为其创建一个模型对象。

此外,在您的模型对象中,您需要有一个设置为NSMutableArray. 然后,在插入任何模型对象之前,将childrenKeyPath属性设置NSTreeController为等于该属性或键的名称。

这是因为NSTreeController并且并非旨在保存数据或子对象本身,而是为创建和保留NSTreeNode的模型充当简单但有用的“地图” 。

我希望这些信息对其他人有所帮助,因为 StackOverflow 的其余部分对此保持沉默……

于 2013-09-17T07:04:34.770 回答