NetworkActivityIndicator não está funcionando o mesmo no iPhone e simulador?
-
26-09-2019 - |
Pergunta
Estou usando o NetworkActivityIndicator para mostrar que meu aplicativo está fazendo algum trabalho. Quando eu executo o aplicativo no simulador, ele mostra da maneira que eu quero - basicamente girando o tempo todo até que a guia selecionada carregue os dados do servidor - mas quando eu coloco o aplicativo no meu telefone, só recebo uma fração de segundo de O girador antes de desaparecer. Geralmente apenas gira logo antes da exibição na tela.
Ideias?
EDIT: O problema pode ter a ver com o fato de eu estar usando um tabbar ... no simulador, o AtivityIndicator girará na tela/tab 1 enquanto a tela/guia 2 estiver carregando. No telefone, só vejo o ActivityIndicator por uma fração de segundo depois que a tela 2 finalmente aparece.
-(void)viewDidLoad {
// call to spinTheSpinner
[NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];
// method to Get the Data from the Server
[self getDataFromServer];
}
-(void)spinTheSpinner {
NSLog(@"Spin The Spinner");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:YES];
[pool release];
}
-(void)doneSpinning {
NSLog(@"done spinning");
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
-(void)getDataFromServer {
// does a bunch of stuff to retrieve and display data
}
Solução
Você liga o spinner aqui ...
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
Mas imediatamente você desliga ...
[self performSelectorOnMainThread:@selector(doneSpinning) …];
Claro que não vai mostrar. Estou surpreso que ele apareça no simulador.
o -doneSpinning
o método deve ser chamado depois -getDataFromServer
está pronto, ou apenas fazer
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
[self getDataFromServer]; // assumes it is blocking.
app.networkActivityIndicatorVisible = NO;