Come inviare e ricevere dati usando NSURLConnection

Attenzione: Questo è un articolo tecnico dedicato alla programmazione iPhone, quindi per programmatori che conoscono l’SDK della Apple e il linguaggio di programmazione Objective-C.

Questo è un semplice esempio di come sia possibile inviare e ricevere dati utilizzando la classe NSURLConnection.

Innanzitutto è necessario costruire la richiesta. Se non avete bisogno di inviare dati nell’URL copiate il seguente codice:

NSString *myURLString = @”http://google.com/”;
NSURLRequest *request = [ [ NSURLRequest alloc ] initWithURL: [ NSURL URLWithString: myURLString ] ];

Se avete bisogno di impostare il modo di utilizzo della cache e un intervallo di tempo entro il quale la quale la connessione andrà in timeout utilizzate il metodo di NSURLRequest -initWithURL: cachePolicy: timeoutInterval:

Se invece la vostra richiesta richiede l’invio di dati nell’URL è necessario utilizzare la classe NSData ed aggiungerla ad un oggetto di tipo NSMutableURLRequest.
Codice:

NSString *myRequestString = @”&myVariable1=Apple%20Blog&myVariable2=appleblog”;
NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ]
NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString: @”http://www.google.com/” ] ];
[ request setHTTPMethod: @”POST” ];
[ request setHTTPBody: myRequestData ];

Una volta che la richiesta è stata creata, è necessario inviarla e attendere la risposta.

Codice:

NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];

L’oggetto returnData di tipo NSData contiene a questo punto i dati richiesti. Se la connessione va in timeout o si verificano alcuni errori nil sarà la risposta.

Nota: -sendSynchronousRequest: returningResponse: error: si bloccherà fino a che la richiesta non va in timeout o ritornano i dati richiesti. Se volete evitare di interrompere il funzionamento dell’interfaccia durante una chiamata di questo tipo vi consigliamo di eseguire il codice all’interno di un thread secondario.

What do you feel about this?