2012-05-31 5 views
6

Estoy teniendo muchísimo tiempo para que todo este trío de datos básicos, guiones gráficos y UISearchBar trabajen juntos como deberían. Después de haber construido con éxito la tabla con datos centrales, restringir los elementos con un texto de búsqueda y modificar prepareForSegue, todavía hay un inconveniente ...Problemas para pasar indexPath.row con prepareForSegue con UISearchBar

Cuando hago clic en cualquier elemento en la tabla para ir a la vista de detalle, todo está bien en la mesa sin filtro. Se llama a PrepareForSegue y el detalle aparece perfectamente.

Cuando busco, mi tabla está filtrada (voy a la opción de matriz filtrada por ahora en lugar de un segundo NSFetchedResultsController, ¡pero no por falta de intentos!).

Cuando hago clic en un elemento en la lista filtrada, se llama a prepareForSegue y se presiona la vista de detalles, sin embargo, siempre extrae los detalles del primer elemento de la lista.

Por ejemplo, si busqué "c" y la lista se redujo a "Charlie" y "Cookie", cuando selecciono "Charlie" veo la vista de detalle de "Charlie". Cuando selecciono "Cookie", desafortunadamente, también veo la vista detallada de "Charlie"

Supongo que el problema es el código prepareForSegue (¿quizás incorrectamente?). Aquí está el código:

SampleTVC *sampleDetailTVC = segue.destinationViewController; 
    sampleDetailTVC.delegate = self; 

    // Store selected Role in selectedRole property 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    // self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (savedSearchTerm){ 
     self.selectedRole = [self.searchResults objectAtIndex:indexPath.row]; 
    } else { 
     self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name); 
    sampleDetailTVC.role = self.selectedRole; 

¡Cualquier ayuda sería apreciada!

+0

Al seleccionar "cookies", puede iniciar la sesión del valores de 'self.searchResults' y' indexPath.row' en el punto donde obtienes el rol? –

+0

Cuando agrego: if (savedSearchTerm) { self.selectedRole = [self.searchResults objectAtIndex: indexPath.row]; NSLog (@ "lo que son resultados de búsqueda:% @ what es indexpath:% @", self.searchResults, indexPath.row); -------------------- Obtengo lo siguiente: ¿qué son los resultados de búsqueda: charlie, cookie [editado para acortar] lo que es indexpath: (nulo) ----- I ¿Estoy pensando que index.path (null) puede ser el problema? –

+0

y en la tabla no buscada, si registro indexPath obtengo: ¿qué es indexpath: 2 índices [0, 3] –

Respuesta

12

Gracias a Phillip Mills, de la respuesta:

simplemente tuvieron que añadir:

indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 

muestra completa:

SampleTVC *sampleDetailTVC = segue.destinationViewController; 
    sampleDetailTVC.delegate = self; 
    // Store selected Role in selectedRole property 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    // self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (savedSearchTerm){ 
     indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
    self.selectedRole = [self.searchResults objectAtIndex:indexPath.row]; 
    } else { 
     self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name); 
    sampleDetailTVC.role = self.selectedRole; 
+0

No olvides que puedes aceptar tu propia respuesta. –

+0

¡Gracias !, no me dejará por otras 17 horas ... :) –

Cuestiones relacionadas