2012-04-09 2 views
10

Je suis en train de faire une application qui utilise une base de données (en fait dans mon localhost), j'ai essayé avec ASIHTTPRequest mais ayant tant des problèmes avec iOS 5 (j'ai appris à utiliser le formulaire ASIHTTPRequest il: http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-serviceavec NSURLRequest

maintenant, je suis en train avec l'API fournie par Apple: NSURLRequest/NSURLConnection etc ...

J'ai lu le guide d'Apple en ligne et de faire ce premier code:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    // Do any additional setup after loading the view, typically from a nib. 



    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 

           URLWithString:@"http://localhost:8888/testNSURL/index.php"] 

           cachePolicy:NSURLRequestUseProtocolCachePolicy 

           timeoutInterval:60.0]; 



    [request setValue:@"Hello world !" forKey:@"myVariable"]; 



    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if (theConnection) { 

     receiveData = [NSMutableData data]; 

    } 

} 

J'ai ajouté les délégués nécessaires par l'API

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

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

- (void)connection:(NSURLConnection *)connection 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Voici mon code php:

<?php 
if(isset($_REQUEST["myVariable"])) { 
    echo $_REQUEST["myVariable"]; 
} 
else echo '$_REQUEST["myVariable"] not found'; 
?> 

Alors quel est le problème? Quand je commence l'application, il se bloque immédiatement avec cette sortie:

**

**> 2012-04-09 22:52:16.630 NSURLconnextion[819:f803] *** Terminating app 
> due to uncaught exception 'NSUnknownKeyException', reason: 
> '[<NSURLRequest 0x6b32bd0> setValue:forUndefinedKey:]: this class is 
> not key value coding-compliant for the key myVariable.' 
> *** First throw call stack: (0x13c8022 0x1559cd6 0x13c7ee1 0x9c0022 0x931f6b 0x931edb 0x2d20 0xd9a1e 0x38401 0x38670 0x38836 0x3f72a 
> 0x10596 0x11274 0x20183 0x20c38 0x14634 0x12b2ef5 0x139c195 0x1300ff2 
> 0x12ff8da 0x12fed84 0x12fec9b 0x10c65 0x12626 0x29dd 0x2945) terminate 
> called throwing an exception** 

**

Je suppose, cela signifie que somethings ne va pas avec cette ligne:

[request setValue:@"Hello world !" forKey:@"myVariable"]; 

Cela fonctionne réellement si je commente cette ligne.

Ma question est: Comment puis-je envoyer des données à une API PHP, en utilisant NSURLRequest et NSURLConnexion?

Merci de votre aide.

P.S. Soit dit en passant, j'ai sur serveur pauvres connaissances, PHP ect ...

Répondre

14

essayez ceci:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL 

          URLWithString:@"http://localhost:8888/testNSURL/index.php"] 

          cachePolicy:NSURLRequestUseProtocolCachePolicy 

          timeoutInterval:60.0]; 

[request setHTTPMethod:@"POST"]; 
NSString *postString = @"myVariable=Hello world !"; 
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

if (theConnection) { 

    receiveData = [NSMutableData data]; 

} 

vu ici https://stackoverflow.com/a/6149088/1317080

+0

Nous vous remercions de votre réponse rapide! Malheureusement cela ne marche pas: J'ai une erreur avant la compilation: "Aucune @interface visible pour NSURLRequest déclare le sélecteur" setHTTPMethod ":/ – Edelweiss

+1

changez votre requête en NSMutableURLRequest, éditez ma réponse aussi –

+1

Eh bien, l'application ne plante pas! Maintenant, comment puis-je avoir accès à la réponse de mon serveur? Je pense que c'est dans le receiveData? Quel message devrais-je lui envoyer pour obtenir mon "Hello world" de retour? – Edelweiss

4

Essayez le code ci-dessous est l'une des façons simples à consomment un service Web (json)

NSURL *url = [NSURL URLWithString:@"yourURL"]; 

NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url]; 

NSURLResponse *response; 

NSError *error = nil; 

NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq 
               returningResponse:&response 
                 error:&error]; 
if(error!=nil) 
{ 
    NSLog(@"web service error:%@",error); 
} 
else 
{ 
if(receivedData !=nil) 
{ 
    NSError *Jerror = nil; 

    NSDictionary* json =[NSJSONSerialization 
         JSONObjectWithData:receivedData 
         options:kNilOptions 
         error:&Jerror]; 

    if(Jerror!=nil) 
    { 
    NSLog(@"json error:%@",Jerror); 
    } 
} 
} 

Espérons que cela aide.