我正在创建自己的可绑定(bind)自定义 TreeView 。为此,我想观察 NSTreeController 来更新其项目的多对多关系。 NSTreeController 绑定(bind)到 CD 管理对象上下文。每个深度级别都有自己的 CD 实体,具有parent/children/isLeaf 属性。我需要在 View 中保持相同的层次结构(以及项目子项的顺序)。如果插入了某些内容,我将开始观察其子属性。当然,我需要知道新插入的对象的索引路径。
我想确切地知道插入/删除了什么,这样我就可以开始观察它的子项插入/删除情况。据我了解,执行此操作的标准方法是在observeValue:forKey ...中查找“更改”NSDictionary,但更改为NULL。
我知道这是一个很长时间的错误,但是有一些好的解决方法吗?我已经看到一些示例的 View 保存数组,然后当模型更改时,您可以比较差异。对于 TreeView 来说更复杂。这种方式还会浪费内存和 CPU 周期。 我正在测试一种解决方法。它只是有效,所以我不会描述它。
最佳答案
如何子类化 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];
}
关于cocoa - 观察 NSTreeController 绑定(bind)的核心数据实体以进行插入/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339967/