Adición de un objeto hijo usando NSTreeController / NSOutlineView
-
04-10-2019 - |
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.
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.