iPhone navigationBar titleView sincronizzazione problema richiesta
-
27-10-2019 - |
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.
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];
}