Pregunta

Aquí está mi configuración.

En mi delegado de solicitud, tengo una propiedad llamada currentFoo. La propiedad currentFoo se establece en la instancia de Foo seleccionada actualmente. Cada una de las instancias de Foo tiene una propiedad que es un NSMutableArray llamado resultados. Los objetos en los resultados pueden ser de varios tipos, NSNumber, NSString, etc ...

Tengo un NSTableView que se muestra en ciertos momentos que permite al usuario ver la colección de resultados en el currentFoo. También hay una interfaz de usuario para permitir agregar y eliminar de los resultados.

El NSTableView tiene una sola columna que está vinculada a la clave del controlador de los objetos organizados NSArrayController. He escrito una subclase NSValueTransformer que se usa en este enlace para convertir los diversos tipos posibles encontrados en la matriz de resultados a la representación de cadena que quiero que se muestre en la columna de la tabla.

El enlace de la matriz de contenido de NSArrayController se conecta a una clave del controlador de selección NSObjectController, con currentFoo.results como la ruta de la clave del modelo. Finalmente, el NSObjectController obtiene su contenido del delegado de la aplicación.

Todo esto funciona muy bien, agregar, eliminar y mostrar currentFoo.results en NSTableView funciona como deseo.

Mi problema es cuando intento editar el contenido de la vista de tabla. He configurado mi subclase NSValueTransformer para permitir transformaciones inversas y he implementado reverseTransformedValue :, el paso a través del código me muestra que cuando edito el valor en la fila NSTableView, se envía correctamente a ese método de mi transformador de valores, se transforma y se devuelve.

El error se produce cuando los enlaces intentan actualizar el modelo con el valor transformado inverso:

  

Encuadernaciones de cacao: valor de configuración de error   para la ruta clave del objeto 0 (desde el límite   objeto (nulo): [setValue: forUndefinedKey:]:   esta clase no es un valor clave   Codificación compatible con la clave.

Básicamente, hay una matriz vinculada a la vista de tabla, y cuando el usuario edita la fila, quiero transformar la cadena de nuevo en el objeto apropiado. Los enlaces de cacao me dan este error que me lleva a creer que necesito establecer algo en la ruta clave del enlace NSTableColumn, pero no estoy seguro de qué. He intentado " auto " y eso no funcionó.

Cualquier ayuda es apreciada.

¿Fue útil?

Solución

La clave del modelo no puede estar vacía & # 8212; por lo tanto, aparece el mensaje de error.

Cambie los objetos resultantes de ser objetos primitivos (cadenas, números encuadrados, etc.) para modelar objetos (de la clase FooResult), y establezca la ruta de la clave del modelo del enlace al nombre de la propiedad de los objetos modelo que tendrá la vista de tabla mutar.

Básicamente, no se puede enlazar directamente a una matriz de objetos primitivos. Debe enlazar a alguna propiedad de una matriz de objetos modelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top