Hay varias formas de hacerlo. Primero, es importante notar que dataWithContentsOfURL
no es una solicitud asíncrona. Lo que significa que si lo usa para transferir grandes cantidades de datos, es muy probable que congele la aplicación. Para solicitudes asíncronas, debe usar NSURLRequest.
Dicho esto, existen excelentes API para cargar/descargar datos de forma asíncrona. Uno que se usa con mucha frecuencia y está bien documentado es AFNetworking . Esto está codificado encima de NSURLRequest.
Por ejemplo, en su PHP puede recuperar los campos de una declaración POST como esta:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
En su aplicación, puede llamar al script PHP con una solicitud POST en AFNetworking de la siguiente manera:
NSString *username = @"username";
NSString *email = @"email";
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"yourUrl" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSLog(@"Sending POST request to server");
[formData appendPartWithFormData:[username dataUsingEncoding:NSUTF8StringEncoding] name:@"username"];
[formData appendPartWithFormData:[email dataUsingEncoding:NSUTF8StringEncoding] name:@"email"];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"SERVER UPLOAD FRACTION COMPLETED: %f", uploadProgress.fractionCompleted);
});
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSLog(@"responseObject %@", responseObject);
NSString *responseString = [[[NSString alloc] initWithData:responseObject encoding:NSASCIIStringEncoding] mutableCopy];
NSLog(@"The respose is: %@", responseString);
if(error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"The response is: %@", responseString);
// Do something with the response
}
}];
[uploadTask resume];