2009-04-03 22 views
6

Tengo UITableViewController como RootViewController. Necesito agregar filas a la tabla dependiendo de los datos que obtengo de otro hilo que inicie desde el hilo de RootViewController. Cuando regreso de otro hilo al hilo de mi RootViewController, tengo los datos actualizados, pero no puedo actualizar el TableView. Llamé al método [self.tableview reloadData]; pero parece que no funciona. También probé la llamada [self.tableview setNeedsDisplay] pero sin éxito. ¿Cómo actualizo TableView con nuevos datos?No se puede actualizar UITableView

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

Luego hay un hilo de clase de recepción que está recibiendo continuamente datos. Su clase base es NSObject. Entonces, utilicé la clase de delegado de Aplicación (que tiene una instancia de la clase RootViewController) para llamar a este método de recarga de datos de la clase RootViewController en mi hilo de recepción.

No puedo invocar el método anterior utilizando performSelectorOnMainThread.

Respuesta

12

hey ¿estás seguro de que estás actualizando la tabla de visualización/carga de tabla de carga en el hilo principal? me enfrenté al mismo problema, los datos estaban ahí pero hasta usuario se desplaza, tableview no se ha actualizado

tras googlear llegué a saber lo que necesita para llamar al método reloadData en el hilo principal ui

ejemplo de código siguiente:

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

Asegúrese de que devuelve los valores correctos de numberOfRF ForSection para los principiantes.

También asegúrese de que su método cellForRowAtIndexPath esté usando esta información para obtener el contenido de la celda.

Su método reloadData debe invocarse en el hilo principal, no en ningún otro hilo.

Podremos ayudarle mejor si puede publicar el código correspondiente.

Cuestiones relacionadas