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

Ale*_*erg 6 cocoa cocoa-bindings

NSArrayControllercontentArray 绑定到an时NSUserDefaultsController,必须选中绑定上的"Handles Content As Compound Value"复选框.这已成为传统智慧,但该选项实际上做了什么?

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

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

pau*_*kow 2

消息流在这里解释得很好:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/MessageFlow.html#//apple_ref/doc/uid/TP40002149-186285

这是我尝试回答的:

  1. contentObject或绑定contentArray指定的原始内容对象contentSet是使用 NSUserDefaultsController 检索的valueForKeyPath:
  2. 该内容对象使用值转换器的transformedValue:方法进行转换
  3. 来自用户的新值被插入到转换后的内容对象中
  4. 内容对象使用以下方法进行逆变换inverseTransformedValue:
  5. 新的、逆变换的内容对象被设置为新的内容对象,并使用以下方法传递给 NSUserDefaultsControllersetValue:forKeyPath: