Alhazred Inviato 6 Luglio 2011 Segnala Condividi Inviato 6 Luglio 2011 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 Altre opzioni di condivisione...
Alhazred Inviato 6 Luglio 2011 Autore Segnala Condividi Inviato 6 Luglio 2011 Sembra che NSData *dati = [NSURLConnection sendSynchronousRequest:richiesta returningResponse:&response error:&error]; blocchi la vista non facendo partire l'indicatore. Come si fa una richiesta asincrona? Link al commento Condividi su altri siti Altre opzioni di condivisione...
Alhazred Inviato 6 Luglio 2011 Autore Segnala Condividi Inviato 6 Luglio 2011 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 Altre opzioni di condivisione...
fra.makaveli Inviato 6 Luglio 2011 Segnala Condividi Inviato 6 Luglio 2011 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 Altre opzioni di condivisione...
Alhazred Inviato 7 Luglio 2011 Autore Segnala Condividi Inviato 7 Luglio 2011 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 Altre opzioni di condivisione...
fra.makaveli Inviato 7 Luglio 2011 Segnala Condividi Inviato 7 Luglio 2011 la cosa strana è che avevo provato la stessa cosa ma non andava... (a dir la verità avevo provato il metodo performSelector senza argomenti)... Cmq.. bene Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.