Pregunta

grito

Resuld ser un panel de configuración con un OutlineView y "añadir el artículo", "Agregar grupo" y "eliminar" botones. Los botones de añadir entradas a un NSOutlineView. Los datos se almacenan en un NSMutableDictionary (o lo que sea apropiado). Clasificación / DragDrop habilitado para el OutlineView.

¿Cuál es la manera mejor o más simpáticas para esto (y escribir menos código)?

Modificar NSMutableDictionary, NSOutlineView refresca desde NSMutableDictionary? Modificación de NSOutlineView, El resultado se almacena en NSMutableDictionary? ... NSTreeController? ... CoreData?

¿Cuál es la mejor práctica para eso?

Gracias de antemano!

¿Fue útil?

Solución

Esta es una pregunta muy amplia. Siempre debe almacenar sus datos en el modelo de un objeto del modelo de algún tipo, que sea una entidad de Datos Básicos, un NSMutableDictionary o un objeto personalizado de su propia creación. Definitivamente no se debe almacenar los datos en una instancia NSTreeController o NSOutlineView, estos no son los objetos del modelo.

Si está utilizando la base de datos para el resto de su aplicación y que necesita para persistir los datos que se gestiona mediante la vista de esquema, entonces es una buena opción, pero podría ser una exageración si tiene únicos requisitos simples.

Para controlar lo que se muestra en la vista de esquema También se puede usar NSTreeController o en su propio objeto controlador que responde a los protocolos de origen de datos NSOutlineView y delegadas. En la práctica es posible utilizar ambos, ya que algunas cosas tales como si un artículo o no es un elemento de grupo sólo puede ser controlada por los métodos NSOutlineView delegado.

En mi experiencia personal he encontrado que NSTreeController puede ser muy difícil de tratar para cualquier cosa más allá de tareas muy simples y ahora ya lo uso, me parece que es mucho más simple que sólo tiene que utilizar los métodos del origen de datos en mi propio controlador.

En cuanto a modificar el contenido de la vista de esquema, siempre se debe modificar el modelo a través de un controlador, nunca se debe actualizar la vista directa. Se podría aplicar métodos tales como -add: en el controlador o utilizar el método de -add: NSTreeController si se está usando.

Su controlador de vista debe entonces detectar el cambio en el modelo y pedir al objeto de actualizar. El controlador de vista y el controlador de modelo puede ser el mismo objeto pero no tiene que ser. valor-clave de Observación es una tecnología útil que puede informar a su controlador de un cambio en el modelo.

A continuación, algunos ejemplos de código de Apple que le puede resultar útil:

http://developer.apple.com/mac/library/samplecode/ SourceView /

http://developer.apple.com/Mac/library/samplecode/ AbstractTree /

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