Question

Voici ma situation: je fais des requêtes HTTP synchrones à collecter des données, mais avant la main que je veux placer une vue de chargement à l'intérieur de la barre de navigation vue du titre. Après la demande est terminée, je veux revenir l'arrière titleview à zéro.

[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.

Je sais que les travaux de vue de chargement car après la demande est sur le point de vue de chargement est affiché.

Mon problème: Il devrait être évident à ce stade mais, fondamentalement, je veux retarder la fonction [self makeHTTPconnection] jusqu'à ce que la [self showLoading] terminée.

Merci pour votre temps.

Était-ce utile?

La solution

Vous ne pouvez pas faire cela dans une approche synchrone. Lorsque vous enverriez [auto showLoading] message, l'interface utilisateur ne sera pas mis à jour jusqu'à ce que l'ensemble des finitions de la méthode, il serait déjà terminer les deux autres tâches ( makeHTTPConnection et < em> endLoading ). Par conséquent, vous ne verrez jamais la vue de chargement.

Une solution possible à cette situation travaillerait simultanément:

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

Ensuite, vous devez ajouter le * _sendRequest * Méthode:

- (void)_sendRequest
{
    [self makeHTTPConnection];
    //[self endLoading];
    [self performSelectorOnMainThread:@selector(endLoading) withObject:nil waitUntilDone:YES];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top