2010-04-13 10 views
0

J'utilise le NetworkActivityIndicator pour montrer que mon application fait du travail. Lorsque j'exécute l'application dans le simulateur, elle montre la façon dont je veux - tourner tout le temps jusqu'à ce que l'onglet sélectionné charge les données du serveur - mais quand je mets l'application sur mon téléphone, je reçois seulement une fraction de seconde le fileur avant qu'il disparaisse. Habituellement, seules les parties tournent juste avant que la vue n'apparaisse à l'écran.NetworkActivityIndicator ne fonctionne pas de la même manière sur iPhone et Simulator?

Des idées?

EDIT: Le problème peut provenir du fait que j'utilise un TabBar ... Dans le simulateur, le ActivityIndicator tournera sur l'écran/onglet 1 pendant le chargement de Screen/Tab 2. Au téléphone, je ne vois l'ActivityIndicator qu'une fraction de seconde après l'apparition de l'écran 2.

-(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 
} 
+0

Pourriez-vous montrer un code lié à ce problème? – Elegya

Répondre

0

Vous mettez le spinner ici ...

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

Mais immédiatement vous l'éteignez ...

[self performSelectorOnMainThread:@selector(doneSpinning) …]; 

Bien sûr, il ne sera pas affiché. Je suis surpris que cela se voit dans le simulateur.

La méthode -doneSpinning devrait être appelé après-getDataFromServer est fait, ou tout simplement faire

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; 
[self getDataFromServer]; // assumes it is blocking. 
app.networkActivityIndicatorVisible = NO; 
+0

N'ai-je pas besoin d'utiliser le threading pour networkActivityIndicator? – Chris

+0

@Chris: Pourquoi enfiler? – kennytm

+0

J'ai essayé votre suggestion. Joue toujours avec mais il agit de la même manière. Affichage sur le simulateur, uniquement affiché sur le téléphone après le changement d'écran. Parfois, sur le téléphone, il ne montre pas le fileur du tout. – Chris