2012-05-31 10 views
6

Sto avendo un sacco di tempo per far funzionare tutto questo Core Data, Storyboard, trio UISearchBar insieme come dovrebbe. Avendo finalmente creato la tabella con Core Data, ristretto gli articoli con un testo di ricerca e modificato prepareForSegue, c'è ancora un singhiozzo ...Problemi nel passaggio di indexPath.row con prepareForSegue con UISearchBar

Quando faccio clic su qualsiasi elemento della tabella per andare alla vista di dettaglio, tutto va bene nel tavolo non filtrato. PrepareForSegue viene chiamato e il dettaglio appare perfettamente.

Quando eseguo una ricerca, la mia tabella viene filtrata (selezionerò l'opzione di array filtrato per ora anziché un secondo NSFetchedResultsController, ma non per mancanza di tentativi!).

Quando faccio clic su un elemento nell'elenco filtrato, viene chiamato prepareForSegue e viene spostata la vista di dettaglio, tuttavia, i dettagli vengono sempre estratti dal primo elemento nell'elenco!

Ad esempio, se ho cercato "c" e l'elenco è stato ristretto a "Charlie" e "Cookie", quando seleziono "Charlie", vedo la vista dettagliata di "Charlie". Quando seleziono "Cookie", sfortunatamente, vedo anche la vista di dettaglio per "Charlie"

Sto supponendo che il codice di preparazioneForSegue sia il problema (forse in modo errato?). Ecco il codice:

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; 

Qualsiasi aiuto sarebbe apprezzato!

+0

Quando si seleziona "Cookie", si può registrare il valori di 'self.searchResults' e' indexPath.row' nel punto in cui ottieni il ruolo? –

+0

Quando aggiungo: if (savedSearchTerm) { self.selectedRole = [self.searchResults objectAtIndex: indexPath.row]; NSLog (@ "cosa sono i risultati di ricerca:% @ cosa è indicpath:% @", self.searchResults, indexPath.row); -------------------- Ottengo quanto segue: cosa sono i risultati di ricerca: charlie, cookie [modificato per accorciare] cosa è indexpath: (null) ----- I Stai pensando che index.path (null) potrebbe essere il problema? –

+0

e sulla tabella non di ricerca, se registro indexPath ottengo: cosa è indexpath: 2 indici [0, 3] –

risposta

12

Grazie a Phillip Mills, per la risposta:

semplicemente dovuto aggiungere:

indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 

piena del campione:

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

Non dimenticare che puoi accettare la tua risposta. –

+0

Grazie !, non mi lascerà per altre 17 ore ... :) –

Problemi correlati