Vai al contenuto

Activity indicator


Messaggi raccomandati

Su una view ho un pulsante al quale è associato questo metodo

- (IBAction)performSearch:(id)sender {
self.activityIndicator.hidden = FALSE;
[self.activityIndicator startAnimating];

NSMutableURLRequest *richiesta = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sito.it/iosphp/responder.php"]
							cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
[richiesta setHTTPMethod:@"POST"];
[richiesta setHTTPBody:[[NSString stringWithFormat:@"search=%@", self.textInput.text] dataUsingEncoding:NSASCIIStringEncoding]];

NSURLResponse *response;
NSError *error;
NSData *dati = [NSURLConnection sendSynchronousRequest:richiesta returningResponse:&response error:&error];

NSString *esitoRicerca = [[[NSString alloc] initWithData:dati encoding:NSASCIIStringEncoding] autorelease];

[self.activityIndicator stopAnimating];
self.activityIndicator.hidden = TRUE;

if ([esitoRicerca isEqualToString:@"nodata"]) {
	self.labelEsito.text = @"Nessuna corrispondenza trovata";
}
else
{
	self.labelEsito.text = @"";
	TableResultsViewController *table = [[TableResultsViewController alloc] init];
	table.results = [esitoRicerca JSONValue];
	[self.navigationController pushViewController:table animated:YES];
	[table release];
}
}

Nella funzione php a cui viene inviata la richiesta ho messo una pausa di 5 secondi in modo che non sia troppo veloce e poter provare l'indicatore.

Quando premo sul pulsante effettivamente la pausa dello script php si fa sentire, ma l'indicatore non parte.

Ho provato a togliere le righe

[self.activityIndicator stopAnimating];

self.activityIndicator.hidden = TRUE;

tornando indietro nella vista iniziale l'indicatore c'è e gira.

Perché non si attiva prima di inviare la richiesta allo script php?

Link al commento
Condividi su altri siti

No, non è nemmeno quello il problema, ho provato a svuotare il metodo lasciando solo

- (IBAction)performSearch:(id)sender {
   self.activityIndicator.hidden = FALSE;
   [self.activityIndicator startAnimating];
   [NSThread sleepForTimeInterval:5.0];
}

l'indicatore parte dopo 5 secondi benché nel codice preceda lo sleep... non viene eseguito sequenzialmente il codice?

Link al commento
Condividi su altri siti

Ciao.

Non ho ancora avuto l'occasione di usare UIActivityIndicatorView, ma penso che il problema sia che stai eseguendo una chiamata bloccante dall'unico thread della tua applicazione, che è anche responsabile di aggiornare la vista.

O, se ne vale la pena, crei un thread dedicato all'operazione, oppure dovrebbe esistere un modo per gestire callback ed implementare una chiamata asincrona alla rete.

Link al commento
Condividi su altri siti

Ho risolto facendo così

- (IBAction)performSearch:(id)sender {
self.activityIndicator.hidden = FALSE;
[self.activityIndicator startAnimating];

[self performSelector: @selector(submitTheSearch) withObject: nil afterDelay: 0];

return;
}

Il lavoro lo fa submitTheSearch e l'indicatore gira a dovere :)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...