Frage

Hier ist meine Situation: Ich mache synchrone HTTP -Anfragen, Daten zu sammeln, aber vor Hand möchte ich eine Ladeansicht innerhalb der Navigationsleisten -Titelansicht platzieren. Nachdem die Anfrage vorbei ist, möchte ich die TitleView an NIL zurückgeben.

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

Ich weiß, dass die Ladeansicht funktioniert, da nach der Anforderung die Ladeansicht angezeigt wird.

Mein Problem: Es sollte an dieser Stelle offensichtlich sein, aber im Grunde möchte ich das verzögern[self makeHTTPconnection] Funktionieren Sie bis der [self showLoading] hat vervollständigt.

Danke für dich Zeit.

War es hilfreich?

Lösung

Sie können das nicht in einem synchronen Ansatz tun. Wenn Sie senden würden Self -Showing Nachricht, die Benutzeroberfläche würde erst nach Abschluss der gesamten Methode aktualisiert, sodass sie bereits die beiden anderen Aufgaben beenden würde ((MakehttpConnection und Endlastung). Infolgedessen würden Sie die Ladeansicht niemals sehen.

Eine mögliche Lösung für diese Situation würde gleichzeitig funktionieren:

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

Dann müssen Sie die * _sendRequest * -Methode hinzufügen:

- (void)_sendRequest
{
    [self makeHTTPConnection];
    //[self endLoading];
    [self performSelectorOnMainThread:@selector(endLoading) withObject:nil waitUntilDone:YES];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top