Pregunta

En mi aplicación, al igual que muchas aplicaciones de Mac, tengo una lista de fuentes. Por el momento se trata de una NSOutlineView unido a un NSTreeController. Puedo añadir elementos a ella con bastante facilidad, e incluso han sido capaces de duplicar la apariencia "lista de fuentes", con grises en mayúsculas encabezados y todos. Hay algo que evade mí, sin embargo, y que soy yo volviendo loco.

¿Cómo hace uno para la adición de un niño a un punto específico en el árbol? Por ejemplo, digamos que he creado un artículo titulado "queso". Ya he añadido dos hijos a queso, llamados "cheddar" y "Swiss". ¿Cómo puedo añadir "Longhorn Colby" a la lista de los niños ahora que mi método de adición inicial tiene en marcha terminada?

He buscado en Google, pero no puede encontrar una respuesta simple y recta. Por lo que puedo ver, sin embargo, es innecesariamente complicado y que requiere semejante a una ley del Congreso para hacer algo tan simple como comer el desayuno. Por favor, corríjanme si me equivoco.

Actualización:

No creo que estoy usando subtipos. Hasta ahora, así es como he estado poblando mi árbol:

[treeController addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                               [NSNumber numberWithBool:YES], @"isSourceGroup",
                               @"CHEESE", @"name",
                               [NSArray arrayWithObjects:
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Cheddar", @"name",
                                 nil],
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Swiss", @"name",
                                 nil],
                                nil], @"children",
                               nil]];

El bit "isSourceGroup" se utiliza para indicar que este punto es uno de los encabezados en la vista de esquema.

¿Fue útil?

Solución

Trate de cambiar esa NSArray a NSMutableArray, y luego:

[treeController insertObject:longhornColbyDict atArrangedObjectIndexPath:[[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]];

Otros consejos

Suponiendo que cada TypeOfFood tiene una propiedad subtypes la celebración de una matriz, y que esta propiedad se establece en el controlador de árbol como los niños de los nodos Ruta de la clave, enviar un mensaje de la insertObject:inSubtypesAtIndex: queso tipo-de-comida. (Tendrá que han implementado de acceso que en la clase TypeOfFood.)

Dado que este es un descriptor de acceso KVC-compatible, MVA se envuelve cuando el controlador árbol empieza observando la propiedad, lo que significa que el envío del mensaje de acceso debería ser suficiente para disparar las notificaciones correctas y causar los efectos a saber, del lado derecho, la actualización el controlador y la vista.

No he utilizado NSTreeController, sin embargo, por lo que es muy posible que me he perdido algún aspecto de ella que hace que esta falsa respuesta. Por favor probarlo y comentario con lo que sucede.

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