Estou com um problema estranho com o meu tableView. Carrego dados via JSON no meu tableView. Enquanto o JSON está sendo solicitado da Web em outra classe, mostro uma exibição do indicador de atividade na minha exibição atual e o tableView está oculto. Eu tenho um método delegado, que é chamado assim que o json estiver pronto.
-(void)didReceivePlayers:(NSArray *)players {
[activityIndicator stopAnimating];
tableViewPlayers.hidden = false;
startButton.hidden = false;
playersData = [[NSMutableArray alloc] initWithArray:players];
[tableViewPlayers reloadData];
NSLog(@"done reloading");
}
O método está sendo chamado perfeitamente. O código é bastante direto. Oculto meu indicador de atividade e mostro meu tableView. Então eu chamo reloadData. Leva apenas alguns milissegundos. MAS, após reloadData, meu activityIndicator ainda é mostrado e leva alguns segundos para mostrar minha tableview, embora o nslog esteja sendo chamado imediatamente.
Também tentei chamar os dados de recarga no mainThread, mas isso não mudou nada.
Obrigado pela ajuda!
Respostas:
2 para resposta № 1Certifique-se de que o código esteja sendo executado no thread principal. Você pode usar a fila de operações principal como esta:
-(void)didReceivePlayers:(NSArray *)players {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[activityIndicator stopAnimating];
tableViewPlayers.hidden = false;
startButton.hidden = false;
playersData = [[NSMutableArray alloc] initWithArray:players];
[tableViewPlayers reloadData];
NSLog(@"done reloading");
}];
}