Pregunta

estado buscando una solución desde hace mucho tiempo, pero todavía sin éxito, tal vez alguien aquí me puede ayudar.

I creó una aplicación que se ejecuta un hilo que se comunica con un servidor web en el fondo. En ocasiones, el subproceso recibe información que me gustaría ver en un UITableView. Debido a la naturaleza dinámica del contenido decidí un NSMutableArray debe ser suficiente para almacenar la información del servidor web.

Cada vez que reciben información del servicio web mi AppDelegate envía una notificación. Mi UITableView registra para recibir ciertos tipos de información que busca dar a conocer en el UITableView.

El método initWithStyle de la UITableViewController contiene el código siguiente:

- (void)addContact:(NSNotification *)note {
    NSLog(@"%@", [note object]);

    NSString *message = (NSString *)[note object];
    NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];

    contact = name;
    [array addObject:contact];
}   

- (void)viewDidLoad {
    [super viewDidLoad];

    array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];

    tv.dataSource = self;
    tv.delegate = self;

    self.tableView = tv;
}

La matriz en Agr.Contacto contiene los datos mostrados en la TableView. Todos los datos agrego manualmente a la matriz en viewDidLoad: se muestra en la tabla, pero no sucede para los datos agregados en el Agr.Contacto: método.

¿Alguien tiene una idea de lo que estoy haciendo mal?

¿Fue útil?

Solución

¿Es la actualización sucediendo en el hilo principal? Se puede utilizar este tipo de función de actualización para asegurarse de que lo hace.

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top