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.