2010-05-17 4 views
0

Je me demande pourquoi cette requête HTTP POST ne fonctionne pas dans mon application iPhone.La requête HTTP POST ne fonctionne pas, les méthodes déléguées ne sont pas appelées

Je sais pertinemment que l'URL est correcte et que les variables que j'envoie sont correctes, mais pour une raison quelconque, la demande n'est pas reçue par la page .aspx.

EDIT:

Je refactorisé le code dans sa propre classe, avec ses propres méthodes de délégué. Mais les méthodes de délégué ne sont pas appelées.

La classe est appelée comme ceci:

URLCallClass *reporter=[[[URLCallClass alloc] init]autorelease]; 
    [reporter sendoview:@"http://mysite/page.aspx" params:httpBodyString]; 

et c'est la classe elle-même:

-(void)sendview:(NSString *)server params:(NSString *)params 
{ 

    NSURL* url=[[NSURL alloc] initWithString:server]; 
    NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url]; 
    [url release]; 

    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]]; 

    connectionResponse=[[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self] autorelease]; 
    //NSURLConnection *connectionResponse = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 


    if (!connectionResponse) 
    { 
     NSLog(@"Failed to submit request"); 
    } 
    else 
    { 
     NSLog(@"---------Report Request submitted ---------"); 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"report received response"); 

} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    } 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"report failed with error"); 
    NSLog(@"%@", [error description]); 
} 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"Promo View Reported"); 
} 

-(void)dealloc 

{ 
    [connectionResponse release]; 

    [super dealloc]; 

} 

Répondre

0

Il tourne, il a dû faire avec filetage

NSURLConnection delegation and threading - iPhone

J'ai utilisé cette solution

http://www.depl0y.com/?p=345

+0

Donc, pour clarifier: tout ce code était en cours d'exécution sur un thread autre que le thread principal? – JeremyP

+0

Eh bien, il y avait UIView en cours d'exécution sur le thread principal et le code httprequest était dans une instance de classe dans cet UIView. Je crois que cette classe de requête http s'est terminée avant de terminer sa connexion url asynchrone une fois que la fonction UIView qui l'a appelée a fini d'exécuter la méthode qui l'a appelée. Donc, je ne pense pas que c'était sur le fil principal, mais la classe qui l'a appelé était. Je pourrais être loin d'ici, c'est tout à fait nouveau pour moi et j'apprends encore. – dubbeat

2

vous devez implémenter la connexion: didFailWithError: dans le délégué.

NSLog(@"%@", [error description]); va vous montrer, ce qui s'est mal passé.

+0

le gestionnaire didfailWithError ne sera jamais appelé – dubbeat

0

Est-ce que votre url est en cours de création? En cas de problème, la méthode NSURL initWithString: renvoie nil.

+0

j'ai commenté tout mon code, sauf pour la code en question et cela a fonctionné trouver. J'utilise un autre NSURLConnection dans la même classe. Il est exécuté avant celui-ci. Cela pourrait-il causer le problème d'une façon ou d'une autre? – dubbeat

+0

url est créé avec succès – dubbeat

0

Imprimez-vous les en-têtes de réponse? Je suggère que vous implémentez presque chaque méthode de délégué pour vérifier ce qui se passe réellement avec votre connexion, essayez d'abord d'imprimer la méthode didReceiveResponse et certaines des données que vous recevez en utilisant la méthode de connexion: didReceiveData.

Et peut-être le codage de vos données est quelque chose processus ne peut pas le serveur, essayez d'utiliser NSUTF8StringEncoding au lieu de NSISOLatin1StringEncoding comme l'encodage du corps.

Questions connexes