Les méthodes déléguées NSURLConnection ne sont pas appelées
J'essaie de créer un simple NSURLConnection pour communiquer avec un serveur à l'aide d'une demande GET. La connexion fonctionne bien, mais les méthodes déléguées de NSURLConnection ne sont jamais appelées.
Voici ce que je fais:
NSString *post = [NSString stringWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ;
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
Ont implémenté les méthodes déléguées suivantes, mais aucune d'entre elles 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];
}
Suis-je en train de manquer 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];
Appelez-vous cela sur un fil d'arrière-plan? Si vous effectuez cette opération sur un thread d'arrière-plan, le thread se termine probablement avant que les délégués puissent être appelés.
Essayez de vérifier la longueur de la réponse reçue, elle ne devrait pas obtenir 0 octet de données.
En plus de vérifier si la demande est appelée à partir du thread principal, vous pouvez vérifier si vous redonnez du temps d'exécution au système (si vous quittez "main"). J'avais un code de test qui resterait dans une 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.