Les méthodes déléguées NSURLConnection ne sont pas appelées

J’essaie de créer un NSURLConnection simple pour communiquer avec un serveur en utilisant une requête GET. La connexion fonctionne bien, mais les méthodes des delegates de NSURLConnection ne sont jamais appelées.

Voici ce que je fais:

NSSsortingng *post = [NSSsortingng ssortingngWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ; [request setURL:[NSURL URLWithSsortingng:[NSSsortingng ssortingngWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [connection start]; 

Avoir implémenté les méthodes de délégué suivantes, mais aucune n’est appelée ..

 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"did fail"); } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"did receive data"); } -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"did receive response "); } -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"did finish loading"); [connection release]; } 

Est-ce que je manque quelque chose?

Essayez d’exécuter l’opération sur le thread principal:

 NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [connection start]; 

Est-ce que vous appelez cela sur un thread d’arrière-plan? Si vous effectuez cela sur un thread d’arrière-plan, le thread quitte probablement avant que les delegates puissent être appelés.

Essayez de vérifier la longueur de la réponse reçue, elle ne devrait pas recevoir 0 octet de données.

En plus de vérifier si la requête est appelée depuis le thread principal, vous pouvez vérifier si vous restaurez le temps d’exécution sur le système (si vous quittez “main”). J’avais un code de test qui restrait en boucle jusqu’à ce que le délégué soit appelé: il ne serait jamais appelé, car le système doit faire des choses pour que le délégué soit appelé, dans le thread principal.