7

Estoy a punto de volverme loco aquí, en mi databse Datos Core Tengo muchos usuarios, he conectado la base de datos a un controlador de tabla vista a través de NSFetchedResultController, y cuando la vista se carga, veo todos mis usuarios, y puedo realizar un push a un viewcontroller de detalles a través del storyboard segue ... hasta ahora Dios, mi tableview contiene una celda personalizada con una vista de imagen y 2 uitextlabels que tienen todos sus valores asignados ...UISearchDisplayController: ¿por qué la vista de resultados de búsqueda contiene celdas vacías?

Ahora, cuando Realizo la búsqueda, creo un NSFetchedResultController nuevo con un predicado, y realizo el performFetch. Obtengo la propiedad fetchedObjects y contiene los usuarios que coinciden, por lo que la búsqueda también funciona como un encanto ... en todas mis fuentes de datos de tablas I compruebe si self.tableView == self.searchdispl.view para ver de qué controlador debo consultar los datos .. En todos los países Los delegados de los controladores compruebo qué controlador está activo, así que sé qué vista recargar. Si registro muchos datos, todo está bien detrás de las escenas, los métodos de delegado y origen de datos usan la vista correcta y el controlador de búsqueda.

En mi cellForRowAtIndexPath puedo desconectar mi user.name, y eso siempre es correcto , también al buscar.

El problema es que la vista UISearchDisplayController que está en la parte superior solo tiene celdas vacías, a menos que establezca mi celda de prototipo dinámico de UITableViewControllers en básica, ¡entonces ambas tablas contienen esa etiqueta con el nombre de los usuarios! La transición desde la celda todavía no funciona, pero hay datos en la celda.

Parece que la vista UISearchDisplayControllers es una vista genérico, al menos cuando se trata de segues y el diseño celular ...

He comprobado todas las conexiones desde el UISearchDisplayController a mi UITableViewController, y todo se ve bien. ..

¿Por qué la vista SearchDisplayControllers no acepta mi diseño de celda y segue?

Gracias :)

Actualización: solo se ha dado cuenta de lo que está mal, pero no encontró la solución todavía. En mi cellForRowAtIndexPath, la celda siempre se configura como la celda predeterminada cuando thr searchdisplayview está en este método ... ¿Realmente necesito crear mi celda en el código para que uisearchdisplay funcione? ¿Por qué no puede usar la celda configurada del guión gráfico?

- (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, dejaré que esto se quede aquí aunque me di cuenta de lo que estaba mal, estoy un poco avergonzado, pero tal vez esta publicación pueda ayudar a otros :) El problema fue que cuando llegué la celda en cellforrowatindexpath, no la obtuvo de la vista tabla original viewcontrollers, así que cambié la línea de UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; a UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier] ;, y ahora todo está bien, la celda tiene el diseño del guión gráfico y segues funciona como un amuleto :) –

+0

Esto realmente funciona, ¡deberías haber publicado esto como la respuesta para tu propia pregunta! –

Respuesta

13

El problema fue que cuando llegué a la celda en la cellForRowAtIndexPath, no llegó desde el tableview viewcontrollers original, por lo que cambió la línea de

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

a

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

y ahora todo está bien, la celda tiene el diseño del guión gráfico y segues funciona como un amuleto ..

+0

Esto resolvió mi problema. Estoy intentando esto en iOS 8, y se siente como un truco terrible. Cara triste... –

Cuestiones relacionadas