Objetos de modelo dado que NSTreeController
representa, ¿cómo se encuentran sus rutas de índice en el árbol y, a continuación, seleccionarlos? Este parece ser un problema deslumbrantemente obvio, pero parece que no puedo encontrar ninguna referencia al mismo. ¿Algunas ideas?Objeto de modelo dado, ¿cómo encontrar la ruta de índice en NSTreeController?
Respuesta
No hay manera "fácil", que tienen que caminar los nodos del árbol y encontrar un camino de adaptación de índices, algo así como:
Objective-C:
Categoría
@implementation NSTreeController (Additions)
- (NSIndexPath*)indexPathOfObject:(id)anObject
{
return [self indexPathOfObject:anObject inNodes:[[self arrangedObjects] childNodes]];
}
- (NSIndexPath*)indexPathOfObject:(id)anObject inNodes:(NSArray*)nodes
{
for(NSTreeNode* node in nodes)
{
if([[node representedObject] isEqual:anObject])
return [node indexPath];
if([[node childNodes] count])
{
NSIndexPath* path = [self indexPathOfObject:anObject inNodes:[node childNodes]];
if(path)
return path;
}
}
return nil;
}
@end
Swift:
Extensión
extension NSTreeController {
func indexPathOfObject(anObject:NSObject) -> NSIndexPath? {
return self.indexPathOfObject(anObject, nodes: self.arrangedObjects.childNodes)
}
func indexPathOfObject(anObject:NSObject, nodes:[NSTreeNode]!) -> NSIndexPath? {
for node in nodes {
if (anObject == node.representedObject as! NSObject) {
return node.indexPath
}
if (node.childNodes != nil) {
if let path:NSIndexPath = self.indexPathOfObject(anObject, nodes: node.childNodes)
{
return path
}
}
}
return nil
}
}
Por qué no usar el NSOutlineView para obtener los elementos principales de este tipo:
NSMutableArray *selectedItemArray = [[NSMutableArray alloc] init];
[selectedItemArray addObject:[self.OutlineView itemAtRow:[self.OutlineView selectedRow]]];
while ([self.OutlineView parentForItem:[selectedItemArray lastObject]]) {
[selectedItemArray addObject:[self.OutlineView parentForItem:[selectedItemArray lastObject]]];
}
NSString *selectedPath = @".";
while ([selectedItemArray count] > 0) {
OBJECTtype *singleItem = [selectedItemArray lastObject];
selectedPath = [selectedPath stringByAppendingString:[NSString stringWithFormat:@"/%@", singleItem.name]];
selectedItemArray removeLastObject];
}
NSLog(@"Final Path: %@", selectedPath);
Esta voluntad de salida: ./item1/item2/item3/...
Supongo que está buscando una ruta de archivo aquí, pero puede ajustar lo que su origen de datos pueda representar.
La pregunta es buscar un NSIndexPath para cualquier objeto dado en el árbol, de modo que pueda cambiar programmatic selectedIndexPath (s) del controlador de árbol a aquel programáticamente. Estás asumiendo que el objeto ya está seleccionado. Si es así, ¡obtendría la selectionIndexPath del controlador de árbol! – stevesliva
- 1. Algoritmo para encontrar la permutación numérica dado el índice lexicográfico
- 2. Cómo reemplazar un objeto en un NSMutableArray en un índice dado con un nuevo objeto
- 3. Dado un objeto javascript arbitrario, ¿cómo puedo encontrar sus métodos?
- 4. Ejemplo de NSOutlineView y NSTreeController
- 5. Oracle encuentra nombre de tabla dado un nombre de índice
- 6. ¿Cómo encontrar el índice de sublista en la lista?
- 7. Encontrar la fecha para un número de semana dado
- 8. cómo encontrar el último índice de cadena en perl
- 9. Usando LINQ, ¿cómo puedo encontrar un objeto con un valor de propiedad dado de una lista?
- 10. Delphi - encuentra el personaje en una posición/índice dado
- 11. ¿Cómo encontrar la ruta de sitemap.xml en los sitios web?
- 12. ¿Cómo encontrar una DLL dado un CLSID?
- 13. Cómo implementar readlink para encontrar la ruta
- 14. Cómo encontrar el índice del objeto en una matriz de JavaScript con jQuery
- 15. LD_LIBRARY_PATH: cómo encontrar un objeto compartido
- 16. Encontrar la ruta de la tarjeta de almacenamiento en WM6
- 17. ¿Existe un método en C# para obtener la ruta relativa dado dos entradas de ruta absoluta?
- 18. Modelo de datos de entidad, índice único
- 19. ¿Eliminar elementos secundarios dado un índice?
- 20. Cómo obtener la ruta de índice de la celda en el gesto de deslizamiento UITableView
- 21. ¿Reemplazar un char en un índice dado en una cadena?
- 22. Modelo de objeto de una red social
- 23. ASPNET MVC: ¿Cómo encontrar la ruta del referer (sic)?
- 24. ¿Cómo obtener el elemento seleccionado de NSOutlineView sin usar NSTreeController?
- 25. ¿Cómo encontrar el índice de un elemento en una lista?
- 26. ¿Cómo encontrar la ruta completa del archivo .pst de Outlook?
- 27. ¿Cómo encontrar métodos anotados en un paquete dado?
- 28. Ruta más corta en ausencia del borde dado
- 29. ¿Cómo puedo encontrar la ruta a una inclusión en Symfony2?
- 30. Obtener el índice del objeto en la matriz para buscar el objeto correspondiente en otra matriz
Ouch, eso es realmente ineficiente. Estoy pensando en escribir una subclase de treecontroller que mantenga un mapeo entre el modelo y treenodes. O tal vez una categoría en el modelo que mantiene referencias al treenode asociado. – Tony
Todo lo que necesitaría hacer en su subclase es mantener un 'NSMutableArray' plano de los nodos de árbol. Debería tener cuidado de que todas las modificaciones de los nodos se reflejen en su matriz, por supuesto. –
Hmm, estaba pensando en un mapeo 'NSMutableDictionary' ya sea el objeto modelo o el objectID a' NSTreeNode's, ya que parece más eficiente para la búsqueda. ¿Hay alguna razón por la que 'NSmutableArray' funcione mejor? – Tony