2012-03-22 13 views
5

Aquí es mi función de recargaiOS UITableView reloadData sólo se actualiza la tabla de la segunda vez que llamo mi función de recarga

- (void) reloadTable:(id)sender 
{ 
    NSLog(@"Reload Table"); 
    NSLog(@"%@",[appDelegate queryList]); 
    [self.driverTable reloadData]; 
    [self.driverTable setNeedsLayout]; 
    [self.driverTable setNeedsDisplay]; 
} 

Aquí es donde yo lo llamo después de recibir datos desde el servicio web

if([elementName isEqualToString:@"Response"]) { 
    Response = NO; 
    LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil]; 
    [lookupView reloadTable:self]; 
} 

Problema tener ahora es después de hacer una búsqueda presionando un botón de búsqueda y recibir los datos. La tabla no se actualiza con los datos nuevos. Si vuelvo a llamar a la misma función presionando nuevamente el botón de búsqueda, la tabla se vuelve a cargar. Ahora sé que los datos están ahí porque imprimo la matriz antes de llamar a la tabla de recarga.

¿Alguna idea de por qué?

+0

¿Por qué necesita setNeedsLayout y setNeedsDisplay? Las UITableViews no necesitan redibujarse, se las arreglan ellas mismas en el tiempo de recarga. – CodaFi

+0

oh, estaba buscando soluciones aquí, algunas personas con problemas similares mencionaron esto, así que solo estaba intentando –

+0

Eliminar el método mencionado por @CodaFi. No debe estar ahí. –

Respuesta

6

Me he encontrado con el mismo problema. Según la documentación de Apple, no se debe llamar a reloadData "en los métodos que insertan o eliminan filas". Una solución alternativa que he usado es retrasar la llamada a reloadData para que no sea inmediatamente después de actualizar la tabla. Prueba esto:

[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:0.5]; 

en el lugar apropiado con la siguiente implementación de delayReloadData

-(void)delayedReloadData{ 
    [self.tableView reloadData]; 
} 

Un lado negativo afectar He ver de este enfoque es que si la fila de tabla es visible hay un pequeño retraso antes de que muestre su contenido

+0

Esto parecía haber funcionado para mí gracias –

+0

[este] (http://stackoverflow.com/questions/14018754/why-reloaddata-shouldnt-be-called-on-methods-that -delete-insert-rows) la pregunta puede contar como seguimiento de la respuesta de @ bobnoble – abbood

0

Descubrí que está haciendo un análisis XML al ver que elementName en su if loop. Por qué necesita load a NIB file en su código de análisis sintáctico. ¿Cuál es el uso de ello? Simplemente puede llamar a su método reloadTable: así como así.

[self reloadTable:self]; 

está completando su tableView utilizando algún arreglo en su archivo app delegate. ¿Inicializó su delegado en su ViewController?

+0

Sí, tiene razón, estoy rellenando la matriz que contiene los datos de la tabla utilizando el delegado de la aplicación. Una vez que sé que toda la información se carga en la matriz, utilizo el delegado de la aplicación para llamar a la función de actualización de tabla en el controlador de vista de la tabla. –

+0

mensaje erroneo ... –

Cuestiones relacionadas