Publicar datos en Objective C usando Json

Estoy tratando de publicar datos en un servicio web de PHP.
Estoy familiarizado con esto en html usando query $ .post pero estoy muy perplejo al intentar esto en el objective C. Probé varios blogs y preguntas en stackoverflow.

Finalmente se me ocurrió el siguiente código:

NSString *jsonRequest = [NSString stringWithFormat:@"{\"Email\":\"%@\",\"FirstName\":\"%@\"}",user,fname]; NSLog(@"Request: %@", jsonRequest); NSURL *url = [NSURL URLWithString:@"http:myurl..."]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody: requestData]; NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

También probé:
NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest: request delegate: self];

Mi servicio web crea un nuevo usuario en la publicación y devuelve el ID de usuario. Ambos realizan con éxito la llamada al servicio web (se crea un nuevo ID de usuario), sin embargo, no publican los datos, es decir, se crea un usuario en blanco cada vez.
Por favor dime si me estoy perdiendo algo.

Gracias.

Mis otros bashs:

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:@"myUrl.. "]]; [request setHTTPMethod:@"POST"]; NSString *postString = @"Email=me@test.com&FirstName=Test"; [request setValue:[NSString stringWithFormat:@"%d", [postString length]] forHTTPHeaderField:@"Content-length"]; [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Finalmente resolví el problema: finalmente, descubrí qué estaba mal. Estaba usando http: // mypath? Params = 123 como mi url. No ejecuté la URL completa (nunca la necesité en otros idiomas). Pero aquí tenía que dar htt: //mypath/index.php? Params = 123

Creo que sería mejor utilizar la clase NSJSONSerialization de esta manera:

 NSDictionary *tmp = [[NSDictionary alloc] initWithObjectsAndKeys: email, @"Email", fname, @"FirstName", nil]; NSError *error; NSData *postdata = [NSJSONSerialization dataWithJSONObject:tmp options:0 error:&error]; [request setHTTPBody:postData]; 

Usar un diccionario y luego convertirlo a JSON es más fácil que crearlo como una cadena.

¡Buena suerte!

[ SWIFT 3.0 ] (actualización)

 let tmp = ["email": email, "FirstName": fname] let postData = try? JSONSerialization.data(withJSONObject: tmp, options: .prettyPrinted) request.httpBody = postData 

He ejecutado su código, y el servidor recibe todos los mensajes.

 POST / HTTP/1.1 Host: linux-test User-Agent: demoTest/1.0 CFNetwork/548.1.4 Darwin/11.3.0 Content-Length: 44 Accept: application/json Content-Type: application/json Accept-Language: en Accept-Encoding: gzip, deflate Connection: keep-alive {"Email":"test@test.com","FirstName":"test"} 

Y siga el código, si jsonRequest tiene caracteres no ASCII, la [jsonRequest length] será incorrecta.

 NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]]; 

Puedes usar strlen en strlen lugar.

 NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:strlen([jsonRequest UTF8String])]; 

o

 [jsonRequest dataUsingEncoding:NSUTF8StringEncoding]; 

Prueba este

 NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding]; 
 NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@posts", SeverURL]]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setRequestMethod:@"POST"]; [request addRequestHeader:@"content-type" value:@"application/json"]; [request addRequestHeader:@"User-Agent" value:@"iOS"]; request.allowCompressedResponse = NO; request.useCookiePersistence = NO; request.shouldCompressRequestBody = NO; request.delegate=self; NSString *json=[[self prepareData] JSONRepresentation];//SBJSON lib, convert a dict to json string [request appendPostData:[NSMutableData dataWithData:[json dataUsingEncoding:NSUTF8StringEncoding]]]; [request startSynchronous];