7

Qui sto andando fuori di testa, nel mio database di dati di base ho un sacco di utenti, ho collegato il database a un tableviewcontroller tramite NSFetchedResultController, e quando la vista viene caricata, vedo tutti i miei utenti, e posso eseguire una push su un dettaglio viewcontroller tramite storyboard segue ... finora, dio, il mio tableview contiene una cella personalizzata con una vista immagine e 2 uitextlabels a cui tutti hanno assegnato i valori del tag.UISearchDisplayController-perché la vista dei risultati della ricerca contiene celle vuote?

Ora, quando I eseguo la ricerca creo un nuovo NSFetchedResultController con un predicato ed eseguo performFetch .. Quindi ottengo la proprietà fetchedObjects e contiene gli utenti corrispondenti, quindi anche la richiesta di ricerca funziona come un incantesimo .. in tutte le mie origini di tabelle viste controlla se self.tableView == self.searchdispl.view per vedere quale controller dovrei interrogare i dati da .. In tutti i co delegati di controllori Controllo per vedere quale controller è attivo, quindi so quale vista ricaricare. Se i nslog sono molti dati, tutto va bene dietro le quinte, i metodi delegate e datasource utilizzano tutti la vista corretta e il controllo fetchcontroller ..

Nel mio cellForRowAtIndexPath posso disconnettere il mio user.name, e questo è sempre corretto , anche durante la ricerca.

Il problema è che la vista UISearchDisplayController che è in cima ha solo celle vuote, a meno che non abbia impostato la cella del prototipo dinamico UITableViewControllers in base, quindi entrambe le visualizzazioni tabella contengono quell'etichetta con il nome utente! Il passaggio dalla cella continua a non funzionare, ma nella cella sono presenti dati.

Sembra come la vista UISearchDisplayControllers è una vista generica, almeno quando si tratta di segues e il layout delle cellule ...

Ho controllato tutti i collegamenti dalla UISearchDisplayController alla mia UITableViewController, e tutto sembra a posto. ..

Perché la vista SearchDisplayControllers non accetta il layout e il percorso della mia cella?

Grazie :)

Aggiornamento: ha appena capito che cosa sta andando male, ma non ancora trovato la soluzione. Nel mio cellForRowAtIndexPath la cella è sempre configurata come cella predefinita quando thr searchdisplayview è in questo metodo. Ho davvero bisogno di creare la mia cella nel codice affinché uisearchdisplay funzioni? Perché non può utilizzare la cella configurata dallo storyboard?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"PersonCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    NSLog(@"Default Cell"); 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

NSFetchedResultsController *controller = tableView == self.tableView ? self.fetchedResultsController : self.fetchedResultsControllerForSearch; 

Person *p; 
p = [controller objectAtIndexPath:indexPath];  

[(UILabel*) [cell viewWithTag:1] setText:p.name]; 
[(UILabel*) [cell viewWithTag:2] setText:@"Status"];  

if(p.avatarImage){ 
    UIImage *avatar = [[UIImage alloc] initWithData:p.avatarImage]; 
    [(UIImageView *) [cell viewWithTag:3] setImage:avatar];  
} 

return cell; 

}

+7

Ok, lascerò stare qui anche se ho appena capito cosa c'era che non va, sono un po 'imbarazzato, ma forse questo post può aiutare gli altri :) Il problema era che quando ho avuto la cella in cellforrowatindexpath, non l'ha vista dalla tabella originale viewcontrollers, quindi ho cambiato la riga da UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; a UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier] ;, e ora tutto va bene, la cella ha il layout dallo storyboard e segues funziona come un fascino :) –

+0

Funziona davvero, dovresti averlo postato come risposta alla tua stessa domanda! –

risposta

13

Il problema era che quando ho ottenuto la cella in cellForRowAtIndexPath, non ha ottenuto dal viewcontrollers Tableview originale, così ho cambiato la linea da

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

a

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

e ora tutto va bene, la cella ha il layout dallo storyboard e segue funziona come un fascino ..

+0

Questo ha risolto il mio problema. Sto provando questo su iOS 8, e sembra un terribile hack. Faccia triste... –

Problemi correlati