观察NSTreeController绑定Core Data实体以进行插入/删除

时间:2009-08-27 09:40:56

标签: cocoa core-data cocoa-bindings key-value-observing key-value-coding

我正在创建自己的可绑定自定义树视图。为此,我想观察NSTreeController对其项目的多对多关系的更新。 NSTreeController绑定到CD托管对象上下文。每个深度级别都有自己的CD实体,其父/子/ isLeaf属性。我需要在视图中保持相同的层次(以及项目子项的顺序)。如果插入了某些内容,我将开始观察其子属性。我需要知道新插入的对象的索引路径。

我想确切地知道插入/移除了什么,所以我可以开始观察它的插入/移除给它的孩子。据我所知,执行此操作的标准方法是在observeValue:forKey ...中查找“更改”NSDictionary,但更改为NULL。

我知道这是一个很长时间的错误,但它有一些很好的解决方法吗?我已经看到一些示例'视图保存数组,然后当模型更改时,您比较差异。树视图更复杂。这也浪费了内存和CPU周期。 我有一个我正在测试的解决方法。它只是有点工作所以我还没有描述它。

1 个答案:

答案 0 :(得分:1)

如何对NSTreeController进行子类化并实现其插入/删除方法。例如,像这样的东西。

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath {

      // ... code to update your object relationships .. 
      // ... Take care here if you update any variables in your model (eg a sortindex) that would trigger KVO in the NSTreeController.  In those case you need to make the updates without triggering KVO by using setPrimitiveValue:forKey or get an infinite loop

      [super insertObject:object atArrangedObjectIndexPath:indexPath];

}