Al vincular un contentArray de NSArrayController
a un NSUserDefaultsController
, debe marcar la casilla de verificación "Maneja el contenido como valor compuesto" en el enlace. Esto se ha convertido en sabiduría convencional, pero ¿qué hace realmente la opción?¿Qué hace NSHandlesContentAsCompoundValueBindingOption de Cocoa binding exactamente?
Escribí una pequeña aplicación de prueba y pude observar que con la opción activada, todo el contentArray
se pasa a la fuente de enlace setValue:forKey:
cada vez que edita una propiedad de un elemento en la matriz. Cuando la opción está desactivada, solo se modifica el objeto del elemento y no se notifica la fuente de enlace.
Esto explica por qué la opción es necesaria para hacer que NSUserDefaultsController
funcione (de lo contrario, no notaría que había editado algo en la matriz y nunca guardará el cambio). Pero no explica quién está haciendo exactamente lo que es diferente. ¿El controlador de array se está haciendo cargo de esta opción y está escribiendo de nuevo la matriz de contenido cuando observa un cambio? Si es así, ¿cómo se relaciona con el propósito declarado de la opción que es "usar un transformador de valor reversible para traducir [...] valores compuestos temporalmente en piezas más pequeñas"?