ios uitableview reloaddata

ios - [tableView reloadData]; no funciona hasta que me desplazo de la tableView



uitableview (5)

Tengo una aplicación simple que descarga los resultados de búsqueda en XML cuando el usuario escribe en una UISearchBar . La descarga y el análisis se enlazan y, una vez hecho, NSNotification una NSNotification para indicar al ViewController con la vista de tabla a [tableView reloadData];

Aquí está el código que recibe la notificación activada una vez que los resultados están en:

- (void)receivedResults:(id)notification { results = [notification object]; DLog(@"Received %i results",[results count]); [[self tableView] reloadData]; }

Obtengo la salida del registro "Recibí 4 resultados", pero la vista de tabla no vuelve a cargar los datos hasta que lo desplazo / arrastro unos píxeles. Estoy usando el estilo de celda UITableViewCellStyleSubtitle y no estoy cambiando la altura ni ding nada sofisticado con la vista de tabla.

¿Qué estoy haciendo mal?


Llamada

[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

en lugar de

[self.tableview reloadData]


Mi problema fue que estaba publicando una NSNotification desde un hilo de fondo. Para evitar esto, simplemente envuelva su método de notificación en un método dispatch_async como este:

dispatch_async(dispatch_get_main_queue(), ^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"FinishedDownloading" object:result]; });

Cuando se reciba esta notificación, se tableView.reloadData a tableView.reloadData en el hilo principal.


Pude conseguir lo mismo para trabajar. Pero el problema era que los datos de recarga debían ser llamados en el hilo principal.

dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; });

Creo que esto es más práctico que la opción performSelectorOnMainThread


Tengo el mismo problema y he intentado todas las soluciones que puedo encontrar en google. Pero todos ellos no funcionan.

Finalmente encontré que agregué observador antes de viewDidLoad, y luego [self.tableView reloadData] no está funcionando.

Primero, llamo a setObserverForUserInfoDatabase en el viewDidLoad de mi controlador de vista de navegación raíz. Porque creo que se llamaba antes. La función es así:

- (void)setObserverForUserInfoDatabase:(NSString *)name { [[NSNotificationCenter defaultCenter] addObserverForName:name object:nil queue:nil usingBlock:^(NSNotification *note) { [self loadUserInfo]; [self.tableView reloadData]; NSLog(@"User Panel Notification /n %@", self); }];}

Luego muevo el código a viewDidLoad del viewController mismo.

- (void)viewDidLoad { NSLog(@"View Did Load"); [super viewDidLoad]; [self setObserverForUserInfoDatabase:UserInfoDataBaseAvailabilityNotification]; }

Y entonces todo funciona bien.

Todavía no sé la razón. Si alguien sabe, por favor dígamelo.


vuelva a cargar su tableView en la viewWillLayoutSubviews tableView viewWillLayoutSubviews