Cocoa 什么是可可装订';s NShandlesContentsCompoundValueBindingOption的具体操作是什么?

Cocoa 什么是可可装订';s NShandlesContentsCompoundValueBindingOption的具体操作是什么?,cocoa,cocoa-bindings,Cocoa,Cocoa Bindings,将NSArrayController的contentArray绑定到NSUserDefaultsController时,必须选中绑定上的“将内容处理为复合值”复选框。这已成为传统智慧,但这一选择究竟起到了什么作用 我编写了一个小的测试应用程序,可以观察到,只要打开该选项,无论何时编辑数组中元素的属性,整个contentArray都会传递给绑定源的setValue:forKey:。禁用该选项时,仅修改元素对象本身,而不通知绑定源 这解释了为什么需要使用该选项才能使NSUserDefaultsCon

NSArrayController
的contentArray绑定到
NSUserDefaultsController
时,必须选中绑定上的“将内容处理为复合值”复选框。这已成为传统智慧,但这一选择究竟起到了什么作用

我编写了一个小的测试应用程序,可以观察到,只要打开该选项,无论何时编辑数组中元素的属性,整个
contentArray
都会传递给绑定源的
setValue:forKey:
。禁用该选项时,仅修改元素对象本身,而不通知绑定源


这解释了为什么需要使用该选项才能使
NSUserDefaultsController
正常工作(否则它不会注意到您在数组中编辑了某些内容,并且从不保存更改)。但这并不能解释到底是谁在做不同的事情。阵列控制器是否负责此选项,并在观察到更改时写回内容阵列?如果是这样,它与选项“使用可逆值转换器将[…]复合值临时转换为更小的片段”的规定目的有何关系?

此处对消息流进行了很好的解释:

以下是我试图回答的问题:

  • 使用
    valueForKeyPath:
    从NSUserDefaultsController检索
    contentObject
    contentArray
    contentSet
    绑定指定的原始内容对象
  • 该内容对象使用值转换器的
    transformedValue:
    方法进行转换
  • 来自用户的新值将插入到转换的内容对象中
  • 内容对象使用
    inverseTransformedValue:
  • 新的反向转换内容对象被设置为新内容对象,并使用
    setValue:forKeyPath: