Exibição do indicador de atividade na visualização de tabela enquanto os dados da linha estão sendo buscados

StackOverflow https://stackoverflow.com/questions/2650525

Pergunta

Estou navegando de tableview1.row para um tableview2 que tem MUITAS linhas sendo buscadas.Dado que o tempo de carregamento é de cerca de 3 segundos, quero que a navegação deslize para tableview2 assim que tableview1.row for selecionado e, em seguida, exiba um UIActivityIndicatorView acima de tableview2 enquanto os dados são buscados e renderizados em sua visualização de tabela subjacente.Observe que tableview2 é na verdade uma subvisão do UIView pai (em oposição ao pai ser um UITableView).

Eu vi esta postagem: O indicador de atividade deve ser exibido ao navegar de UITableView1 para UITableView2

...que fornece instruções para adicionar as chamadas start e stopAnimating do indicador de atividade em torno da busca de dados em viewDidLoad de tableview2.

O problema é que não tenho certeza de como a solução acima poderia funcionar, pois o viewDidLoad é executado e concluído antes que o tableview2 deslize visivelmente para a visualização.

Separadamente, também tentei adicionar um indicador de atividade sobre tableview2 em IB e adicionei o código de animação de início/parada do indicador IBOutlet em viewDidAppear.O que acontece é que a busca de dados é executada e posso ver o indicador girando, mas no final da busca, a visualização da tabela está vazia.Parece que viewDidAppear é tarde demais para adicionar dados à visualização da tabela, pois cellForRowAtIndexPath etc já foi acionado.

Alguém pode sugerir alguma dica?Eu poderia muito bem estar perdendo algo óbvio aqui (são quase 5 da manhã onde estou e acho que meu cérebro está uma bagunça).Devo reativar cellForRowAtIndexPath etc do viewDidAppear?O problema é que minha visualização de tabela é uma subvisão e não a visualização pai?

Obrigado

Foi útil?

Solução

Dei outra olhada em minha própria pergunta e a resposta é bastante direta.Qualquer processamento muito intensivo geralmente não deve ser executado no thread principal.Eu estava tentando fazer minha busca intensiva de dados E exibição da interface do usuário do indicador de atividade no mesmo thread e, portanto, eles estavam sendo processados ​​em sequência, um após o outro.

A solução é inserir meu novo controlador de visualização e a) iniciar a animação do indicador de atividade no thread principal e, em seguida, b) executar a busca intensiva de dados em outro thread (usando performSelectorInBackground).Quaisquer atualizações relacionadas à IU não podem ser aplicadas no thread em segundo plano.Eles devem ser devolvidos ao tópico principal.

Já existem muitos posts SO sobre isso (exemplo aqui), foi uma pena não ter percebido isso desde o início :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top