Je suis en train d'écrire une application iPhone qui appellera une méthode webservice en utilisant un format de message de savon. J'ai besoin d'un processus synchrone car la vue table a besoin de ces données avant de pouvoir être affichée. Donc, j'utilise [NSURLConnection sendSynchronousRequest: returnResponse: erreur:]NSURLConnection problème synchrone
Le problème est que tout le programme va quitter sans aucun message d'erreur après l'appel de la méthode. Même si je mets une instruction NSLog juste après le [NSURLConnection sendSynchronousRequest: returnResponse: erreur:], il n'y a aucune sortie donc je suis sûr que le programme quitte pendant cet appel de méthode. En fait, pendant cette requête HTTP et la substance de réponse.
Cependant, si je mets un point d'arrêt avant l'appel de cette méthode, et exécute le programme en mode débogage, tout fonctionne bien, le programme ne se terminera pas, et j'ai aussi mes résultats.
Quelqu'un peut-il comprendre ce qui se passe? Merci.
- (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");
}
Notez que urlResponse et urlError sont déclarés comme variables d'instance.
J'ai plus d'informations à ce sujet. Quand je cours le programme, et j'appuie sur le "Pause" de la barre d'outils de console, et reprends le programme, tout est bon, j'obtiens le résultat. Si je lance le programme, ne rien faire et le laisser tourner, le programme quitte sans aucun message. Il semble donc que le programme ne peut pas fonctionner dans son propre processus ou thread, boucle d'exécution ou quoi. Je ne suis pas sûr, parce que je pense que peu importe si je cours le programme en mode débogage ou pause alors il reprend, en fait je joins le processus de programme à autre ou quoi, comme accroché par GDB? Toute information sera appréciée. – user556623
Etes-vous sûr que NSURLConnection est la raison de votre crash ?! –