Cocoa绑定的NSHandlesContentAsCompoundValueBindingOption到底做了什么?

时间:2011-05-31 04:29:33

标签: cocoa cocoa-bindings

NSArrayController的contentArray绑定到NSUserDefaultsController时,您必须选中绑定上的“将内容作为复合值处理”复选框。这已成为传统智慧,但该选项实际上做了什么?

我写了一个小测试应用程序并且可以观察到,在打开选项的情况下,只要编辑数组中元素的属性,整个contentArray就会传递给绑定源setValue:forKey:。当该选项关闭时,仅修改元素对象本身,并且不通知绑定源。

这解释了为什么需要使NSUserDefaultsController工作的选项(否则它不会注意到您已经在数组中编辑了某些内容而从未保存更改)。但它并没有解释谁在做什么不同的确切。阵列控制器是否负责此选项并在观察到更改时写回内容数组?如果是这样,它如何与选项的既定目的相关,即“使用可逆值变换器将复合值临时转换成较小的部分”?

1 个答案:

答案 0 :(得分:2)

此处解释了消息流:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/MessageFlow.html#//apple_ref/doc/uid/TP40002149-186285

这是我尝试回答:

  1. 使用contentObject
  2. 从NSUserDefaultsController检索contentArraycontentSetvalueForKeyPath:绑定指定的原始内容对象
  3. 使用值转换器的transformedValue:方法
  4. 转换内容对象
  5. 用户的新值将插入到已转换的内容对象
  6. 使用inverseTransformedValue:
  7. 对内容对象进行逆变换
  8. 新的逆转换内容对象被设置为新的内容对象,并使用setValue:forKeyPath:
  9. 传递给NSUserDefaultsController