Ci sono molti modi per farlo. Innanzitutto, è importante notare che dataWithContentsOfURL
non è una richiesta asincrona. Ciò significa che se lo usi per trasferire dati di grandi dimensioni, ci sono buone probabilità che tu blocchi l'app. Per le richieste asincrone, dovresti utilizzare NSURLRequest.
Detto questo, ci sono eccellenti API per caricare/scaricare dati in modo asincrono. Uno usato molto frequentemente e ben documentato è AFNetworking . Questo è codificato sopra NSURLRequest.
Ad esempio, nel tuo PHP puoi recuperare i campi da un'istruzione POST come questa:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
Nella tua app, puoi chiamare lo script PHP con una richiesta POST in AFNetworking come segue:
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];