2012-04-09 17 views
10

Estoy tratando de hacer para una aplicación que utiliza una base de datos (en realidad en mi localhost), me trató con ASIHTTPRequest pero que tienen tanto problemas con iOS 5 (he aprendido cómo utilizar la forma ASIHTTPRequest allí: http://www.raywenderlich.com/2965/how-to-write-an-ios-app-that-uses-a-web-servicecon NSURLRequest

Ahora estoy tratando con la API proporcionada por Apple: NSURLRequest/NSURLConnection etc, ...

leí la guía en línea de Apple y hacer de este primer código:

- (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]; 

    } 

} 

que añaden los delegados necesarios por la API

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

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

- (void)connection:(NSURLConnection *)connection 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Aquí está mi código php:

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

Entonces, ¿qué está mal? Cuando comienzo a la aplicación, que se colgará inmediatamente con esta salida:

**

**> 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** 

**

supongo, significa que algunas cosas es malo en esta línea:

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

Realmente funciona si comento esta línea.

Mi pregunta es: ¿Cómo puedo enviar datos a una API de PHP, usando NSURLRequest y NSURLConnexion?

Gracias por ayudarnos.

P.S. Por cierto, tengo conocimientos pobres sobre el servidor, PHP etc, ...

Respuesta

14

intente esto:

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]; 

} 

visto aquí https://stackoverflow.com/a/6149088/1317080

+0

¡Gracias por su rápida respuesta! Desafortunadamente, esto no funciona: Tengo un error antes de la compilación: "No hay interfaz @ visible para NSURLRequest declara el selector" setHTTPMethod ":/ – Edelweiss

+1

cambie su solicitud a NSMutableURLRequest, edite mi respuesta también –

+1

¡Bueno, la aplicación no falla! Ahora, ¿cómo puedo tener acceso a la respuesta de mi servidor? Creo que esto está en el receiveData? ¿Qué mensaje debería enviarle para obtener mi "Hola mundo"? – Edelweiss

4

Pruebe el código de abajo es una de las formas simples a consumir un servicio 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); 
    } 
} 
} 

Espero que esto ayude.

Cuestiones relacionadas