Pergunta

Eu sou muito novo para desenvolvimento do iPhone, mas eu estou perto de lançar meu primeiro aplicativo (relacionado a um site I run). O aplicativo requer um grande banco de dados e como tal decidi armazenar apenas os dados mais utilizados localmente, recuperar outros dados através de uma chamada de serviço web JSON a partir do banco de dados de meu site foge.

Ao realizar OK usando o simulador (bater os vivos DB) pesquisas que contam com o serviço de chamada web foram levando mais tempo do que eu teria esperava que quando executado no telefone. Estas chamadas olhar muito pior quando comparado com as pesquisas nativas que são instantânea. Para reduzir a diferença relativa eu ??queria colocar em um falso intersticial (página com indicador de atividade) para as pesquisas nativos (as pesquisas de serviços web já usam um), mas eu tenho tido um problema com o tempo de empurra controlador de navegação quando combinado com sono (n).

De qualquer forma, a seção de busca do meu aplicativo é um NavController wihin uma guia tabController. Ao tentar usar um código como este:

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
sleep(2);

Eu acho que o impulso sempre espera o sono ao fim antes de executar quando o efeito que eu quero é para o viewcontroller para ser empurrado e, em seguida, o aplicativo de esperar por dois segundos antes de continuar para simular o processo de busca.

Eu tive alguns outros resultados estranhos com empurrões NavController, em algumas ocasiões eu experimentei o que parece ser uma maceração de duas viewcontrollers separadas quando o que eu tenho empurrado como restos intersticiais no lugar do conteúdo-wise com apenas o título do que eu quero empurrado em seu lugar restante.

Eu tenho certeza que há uma falta de compreensão da minha parte da culpa por isso estou esperando por um pouco de orientação aqui.

Cheers,

Alan.

Foi útil?

Solução

blocos sleep(float) o principal fio causando a interface do usuário para congelar-se. em vez disso você deve agendar alguma ação a ser executada mais tarde usando -[NSObject performSelector:withObject:afterDelay:]

Exemplo:

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f];

Outras dicas

Eu olhava para mudar sua arquitetura e não dormir no segmento principal - não uma ótima experiência de usuário

olhar em usar NSOperation para controlar suas interações com o serviço web -. Isso permitirá que você fazer fila operações e executá-los em uma seqüência específica ou em paralelo

NSOperation é uma maneira muito fácil para fornecer operações de segmentação robustos -. E você pode optar por fazer uma volta chamada para o segmento principal com quaisquer alterações que pretende fazer ao longo do caminho

Eu acho que esta arquitetura irá ajudá-lo a fazer a interface com o usuário muito melhor - mas uma vez que você tenha reconfigurado o seu pensamento para operações de uso que você vai encontrar muitos outros benefícios.

NB:. Levei algumas vezes para realmente se familiarizar com NSOperation e NSOperationQueue - mas o tempo que eu investido foi definitivamente

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