Domanda

Ecco la mia situazione: sto facendo richieste HTTP sincrono Raccogliere i dati, ma prima di mano voglio posizionare una vista di carico all'interno della barra di navigazione visualizzazione del titolo. Dopo la richiesta è finita Voglio tornare sul retro titleView a zero.

[self showLoading];        //Create loading view and place in the titleView of the nav bar.
[self makeHTTPconnection]; //Creates the synchronous request
[self endLoading];         //returns the nav bar titleView back to nil.

Lo so le opere View Caricamento perché dopo la richiesta è sopra è mostrata la vista di carico.

Il mio problema: Dovrebbe essere ovvio a questo punto, ma fondamentalmente voglio ritardare il Funzione [self makeHTTPconnection] fino a quando il [self showLoading] ha completato.

Grazie per il tempo.

È stato utile?

Soluzione

Non si può farlo in un approccio sincrono. Quando volete inviare [auto showloading] messaggio, l'interfaccia utente non sarebbe stato aggiornato fino a quando l'intero finiture metodo, quindi sarebbe già finire gli altri due compiti ( makeHTTPConnection e < em> endLoading ). Di conseguenza, non si sarebbe mai vedere il panorama di carico.

Una possibile soluzione per questa situazione sarebbe lavorare contemporaneamente:

[self showLoading];
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(_sendRequest) object:nil];
[queue addOperation:operation];
[operation release];

Poi si deve aggiungere il * _sendRequest * Metodo:

- (void)_sendRequest
{
    [self makeHTTPConnection];
    //[self endLoading];
    [self performSelectorOnMainThread:@selector(endLoading) withObject:nil waitUntilDone:YES];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top