UITableView aparece con celdas vacías

Tengo un problema al mostrar UITableView : Algunas celdas están vacías y el contenido de las celdas se hace visible solo después de desplazarse (si la celda vacía se desplaza fuera de la pantalla y luego vuelve). No puedo entender cuál podría ser el problema.

Aquí está mi código:

 - (void)viewDidLoad { [super viewDidLoad]; [self updateFilesList]; [tableView reloadData]; } - (void) viewDidAppear:(BOOL)animated { animated = YES; [self updateFilesList]; [self.tableView reloadData]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { [self.filesList retain]; NSString *title = [self.filesList objectAtIndex:indexPath.row]; title = [title stringByDeletingPathExtension]; title = [title lastPathComponent]; if (title.length >33) { title = [title substringFromIndex:33]; } static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; [cell.imageView setImage:[UIImage imageNamed:@"oie_png-1.png"]]; cell.textLabel.text = title; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } return cell; } 

¡Gracias de antemano por sus sugerencias!

Bueno, tienes el código de personalización de celdas que sucede antes de crear la celda.

Cámbialo de esta manera:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { [self.filesList retain]; NSString *title = [self.filesList objectAtIndex:indexPath.row]; title = [title stringByDeletingPathExtension]; title = [title lastPathComponent]; if (title.length >33) { title = [title substringFromIndex:33]; } static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // This part creates the cell for the firs time if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // This part customizes the cells [cell.imageView setImage:[UIImage imageNamed:@"oie_png-1.png"]]; cell.textLabel.text = title; return cell; } 

El problema es que tú haces

 [cell.imageView setImage:[UIImage imageNamed:@"oie_png-1.png"]]; cell.textLabel.text = title; 

antes de

 if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } 

cambiar el order Lo que está sucediendo es que la primera vez que ejecuta la tabla Ver nunca se hace el título antes de la asignación. Cuando reutilizas la celda funciona porque la celda! = Nil

Necesitas poner estas líneas

 [cell.imageView setImage:[UIImage imageNamed:@"oie_png-1.png"]]; cell.textLabel.text = title; 

después de la condición if(){...} .

En el primer paso, las células son nulas. Ponga esas líneas antes if no hace nada. Es por eso que ves celdas vacías.

Una simple pregunta

¿Por qué llamas a [self.filesList retain] ?

Espero eso ayude.