Aktivität zeigen-Anzeige-animation, wenn Taste gedrückt
Habe ich eine Schaltfläche "Sync". Wenn getippt /gedrückt, sendet es Daten an einen Server und empfängt die Antwort vom server (was eine Weile dauert und friert die gui /Schaltfläche) so wie füge ich ein "Bitte warten" und der Aktivitäten-Anzeige, bis die Daten /Antwort vom server kommt und der text /die Anzeige wird gelöscht und ersetzt durch die Antwort vom server?
Dieser code friert meine app:
- (IBAction) syncButtonTapped
{
[syncButton setEnabled:NO];
//resultText.text= @"Bitte warten ...";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: @"deck.txt"];
NSString *post = [NSString stringWithContentsOfFile:docFile encoding:NSUTF8StringEncoding error:nil];
NSString *post2 = [post stringByReplacingOccurrencesOfString:@"\n" withString:@","];
NSString *post3 = [post2 stringByReplacingOccurrencesOfString:@"\r" withString:@""];
NSString *post4 = [NSString stringWithFormat:@"{\"results\":[%@]}",post3];
NSString *urlString = [NSString stringWithFormat:@"http://storecheck.cortona.de/fetchresults.php?results=%@",[post4 stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];
NSString *data4 = @"";
[data4 writeToFile: docFile atomically: NO encoding: NSUTF8StringEncoding error:nil];
//send request & get response
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
}
ich arbeite auf einem Mac Mini mit iOS 10.6.7
Ich habe auch wie wenn man einen schwarzen hintergrund, 0.5 alpha UIView vor alles zu verdunkeln und deaktivieren Sie alle Benutzer-Interaktion mit den UI-Elementen.
die Eingänge sind deaktiviert, so dass ti nicht wollen, dass diese und brauchen nicht, diese wollen meinst du
stackoverflow.com/questions/593234/...
Es scheint, das Hauptproblem ist, dass das ganze Programm einfriert, bis die Antwort vom server. Also Taster gedrückt - app friert ein - Antwort angekommen.
die Eingänge sind deaktiviert, so dass ti nicht wollen, dass diese und brauchen nicht, diese wollen meinst du
stackoverflow.com/questions/593234/...
Es scheint, das Hauptproblem ist, dass das ganze Programm einfriert, bis die Antwort vom server. Also Taster gedrückt - app friert ein - Antwort angekommen.
InformationsquelleAutor Martin Huwa | 2011-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Synchrone Anfrage blockiert den UI thread und das ist der Grund, warum der Aktivitäten-Anzeige nicht starten. Sie verwenden sollten, NSURLConnection asynchron aus mehreren Gründen, und das ist einer von Ihnen.
Statt:
Tun:
Dann machen returnData Instanz-variable und implementieren NSURLConnectionDeletgate Methoden:
Ich habe code Hinzugefügt, um meine Antwort.
exptected ; token vor : token: - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)Antwort
Ich hoffe, Sie sind nicht einfügen, diese Methoden, die innerhalb einer anderen Methode? Zeig mir deinen code jetzt. Und bitte Bearbeiten Sie die Frage und legen Sie es dort, es ist nicht gonna be ziemlich in einem Kommentar.
ich stellte es außerhalb jeder Methode
InformationsquelleAutor Filip Radelic
Hinzufügen eine Aktivitätsanzeige in UIAleartView helfen.
Kasse diesem...
BEARBEITEN:
Wahrscheinlich der Grund, warum Ihre Anwendung immer blockiert werden, ist diese Methode
sendSynchronousRequest:(NSURLRequest *)request
Folgenden ist die Beschreibung der Methode.
Wenn Sie nicht möchten, dass Sie die Anwendung zu blockieren, dann rufen Sie diese aus dem anderen thread. Lesen Sie folgende auch.
Entnehmen Sie bitte Klasse Referenz von NSURLConnection. Die beiden oben genannten Blöcke entnommen sind.
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html
Erklären UIAleartView *waitAlert in Ihrem code haben Sie nicht nur die Variablen, die ich benutze. so deklarieren Sie im code.
das funktionierte, tahnks, aber das problem mit dem einfrieren nicht gelöst =(
Sind Sie versuchen zu zeigen, diese Warnung aus dem thread die Daten hochladen? Dann wird es Zeit in Anspruch nehmen. Display-Alarm aus Haupt-thread ODER von einer separaten Methode und rufen Sie die Methode form performSelector.
versucht i9t, aber dont wissen, wie man es richtig funktioniert. nun wird der spinner nach dem freeze wie vorher
InformationsquelleAutor Mohammad
Für synchroneous verwenden: (schlechte form, aber funktionierende Lösung)
InformationsquelleAutor RabinDev
Sie müssen es hinzufügen, um Ihre aktuelle Ansicht mit
addSubView:
Ich habe die
setFrame
undaddSubview
so dass Sie die volle BildEs scheint, das Hauptproblem ist, dass das ganze Programm einfriert, bis die Antwort vom server. Also Taster gedrückt - app friert ein - Antwort angekommen.
ich vermute Sie sind dem Aufruf der server über einen synchronen Aufruf, dann müssen Sie die
UIActivityIndicatorView
zu Ihrem controllerView vor der Letzte Zyklus der Benutzeroberfläche aktualisieren. (zum Beispiel inviewDidLoad
oder durch IhreNIB file
). und dann rufen Sie einfach die[indicatorView startAnimating];
wenn die Taste gedrückt wird, bevor der Antrag gestellt wirdInformationsquelleAutor apouche
Erstellen:
Start:
Stop:
Wenn Sie sind endlich fertig, entfernen Sie den spinner von der Ansicht und Freigabe.
InformationsquelleAutor PJR