【问题标题】:What does Cocoa binding's NSHandlesContentAsCompoundValueBindingOption do exactly?Cocoa 绑定的 NSHandlesContentAsCompoundValueBindingOption 究竟做了什么?
【发布时间】:2011-09-05 04:44:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: cocoa cocoa-bindings


    【解决方案1】:

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

    这是我的回答:

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

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 2012-07-23
      • 2016-09-10
      • 2023-03-15
      • 2012-10-17
      • 2021-06-04
      • 1970-01-01
      • 2018-07-30
      • 2019-10-06
      相关资源
      最近更新 更多