selecione RootViewController em appdelegate após solicitação assíncrona
-
21-12-2019 - |
Pergunta
Tento explicar meu problema.No appdelegate tenho que selecionar um rootViewController dependendo do resultado de uma solicitação assíncrona (estou usando o framework AFNetworking).Na verdade, preciso saber se meu usuário tem perfil ou não:se ele tiver um perfil, posso mostrar a página inicial do aplicativo; se não, tenho que mostrar a ele uma visualização de perfil.
No storyboard defini a visualização Home como ponto de entrada designado, mas desta forma esta visualização é sempre mostrada até que a solicitação assíncrona seja concluída.Existe uma maneira de fazer o appdelegate aguardar a resposta?
Solução
Eu acho que não há boa solução para permitir que o app delegate aguarde a resposta, porque se a conexão de rede será ruim, o tempo de carregamento do aplicativo será muito longo e o OS poderá matar seu aplicativo ou o usuário pode desligá-lo.
.Você pode adicionar algum controlador de visualização de carregamento (com animação, então o usuário saberá que o aplicativo está fazendo alguma coisa) em vez de casa um e quando você recebe a resposta presente a visão apropriada para o usuário (Modal Segue poderia fazer o trabalho). Espero que esta ajuda
Outras dicas
Uma solução melhor é usar telas de respingo.Ou seja, quando seu aplicativo é carregado no AppDelegate, crie e pressione um controlador de visualização de respingos.O que apenas conteria um único UiImageView cobrindo a tela inteira mostrando sua imagem de respingo de aplicativos.Após a conclusão de chamadas assíncronas, pop que o controlador de exibição de respingo e pressione o controlador de visualização necessário.
Muitos aplicativos usam essa maneira para baixar dados assíncronos necessários antes de mostrar o aplicativo.Para que o usuário não vê telas vazias ou dados de lixo.
Se algo for falhado como falha de conectividade da Internet ou erro de resposta do servidor, etc., mostrar erro para o usuário e executar o tratamento de erros de acordo com sua lógica de aplicativos.
Você pode navegar programaticamente até o controlador de visualização raiz como
[self.navigationController popToRootViewControllerAnimated:YES];
Este código pode ser colocado na condição de resultado.
Ou do seu jeito, acho que você criou uma sequência para navegar até o rootViewController.Você pode executar programaticamente uma segue usando
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
Se você estiver usando o AFNetworking, basta adicionar um método no bloco de sucesso e passar a resposta a esse método em um parâmetro de dicionário.Verifique sua resposta no método e escolha o controlador que você deseja tornar o controlador de visualização raiz desse método.