Ich schreibe eine iPhone App, die eine Webservice-Methode mit Soap-Nachrichtenformat aufrufen wird. Ich brauche einen synchronen Prozess, weil die Tabellenansicht diese Daten benötigt, bevor sie angezeigt werden können. Also benutze ich [NSURLConnection sendSynchronousRequest: returningResponse: Fehler:]NSURLConnection synchrone Problem
Das Problem ist, das ganze Programm wird ohne Fehlermeldung nach dem Methodenaufruf beendet. Auch ich NSLog Aussage legte kurz nach dem [NSURLConnection sendSynchronousRequest: returningResponse: Fehler:], es gibt keine jede Ausgabe so bin ich das Programm verlassen während dieser Methodenaufruf sicher. Eigentlich während , dass HTTP-Anfrage und Antwort Zeug.
Wenn ich jedoch einen Breakpoint vor diesem Methodenaufruf setzen und das Programm im Debug-Modus ausführen, läuft alles gut, das Programm wird nicht beendet, und ich habe meine Ergebnisse auch.
Kann jemand herausfinden, was vor sich geht? Danke.
- (void) sendSyncHTTPRequest:(NSString *)request_data operation:(ServOperationSync *)serv_ops {
id<ServiceData> serv_data = serv_ops.dataDelegate;
NSURL *urlAddr = [NSURL URLWithString:[serv_data getServURL]];
urlRequest = [NSMutableURLRequest requestWithURL:urlAddr
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:90];
NSData *requestData = [request_data dataUsingEncoding:NSUTF8StringEncoding];
[urlRequest setValue:@"MobilePortal" forHTTPHeaderField:@"User-Agent"];
[urlRequest setValue:[serv_data getSoapAction] forHTTPHeaderField:@"SOAPAction"];
[urlRequest setValue:[NSString stringWithFormat:@"%u", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[urlRequest setValue:urlAddr.host forHTTPHeaderField:@"Host"];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:requestData];
NSLog(@"just before sending http request");
[serv_ops.responseData setData:[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&urlError]];
NSLog(@"after sending http request");
}
Beachten Sie, dass urlResponse und urlError als Instanzvariablen deklariert.
Ich habe mehr Informationen darüber. Wenn ich das Programm ausführen, und ich drücke die "Pause" aus der Konsolen-Symbolleiste, und das Programm fortsetzen, alle Dinge sind gut, ich bekomme das Ergebnis. Wenn ich das Programm ausführen, nichts tun und es laufen lassen, wird das Programm ohne irgendwelche Nachrichten beendet. So scheint es, als ob das Programm nicht in einem eigenen Prozess oder Thread ausführen kann, Schleife oder was? Ich bin nicht sicher, weil ich keine Angelegenheit denke, wenn ich das Programm im Debug-Modus oder Pause führen Sie es dann wieder aufnehmen, lege ich eigentlich das Programm Prozess zu anderen oder was, wie süchtig nach GDB? Alle Informationen werden geschätzt. – user556623
Sind Sie sicher, dass NSURLConnection der Grund für Ihren Absturz ist ?! –