cocoa - 观察 NSTreeController 绑定(bind)的核心数据实体以进行插入/删除

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

我正在创建自己的可绑定(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/

相关文章:

objective-c - 如何获取 NSTextField 的 stringValue 的字符串长度?

objective-c - 初始化 NSMutableArray : [NSMutableArray array];

ios - 创建 NSFetchedResultsController 时获取 objc_exception_throw

ios - 我应该在 iOS 应用程序中的什么位置存储默认字符串列表?

macos - NSOutlineView 与手动 Cocoa 绑定(bind)

c++ - 使用 Qt Creator 和 Cocoa 进行编程(从当前应用程序复制所选文本)

ios - RubyMotion 中的 CDQ 权限错误

objective-c - Cocoa 绑定(bind)不反向更新

objective-c - 如何绑定(bind)到 NSString?

Cocoa:来自原始数据的 AVAsset(即 NSData)