Il y a plusieurs façons de le faire. Tout d'abord, il est important de noter que dataWithContentsOfURL
n'est pas une requête asynchrone. Cela signifie que si vous l'utilisez pour transférer des données volumineuses, il y a de fortes chances que vous geliez l'application. Pour les requêtes asynchrones, vous devez utiliser NSURLRequest.
Cela dit, il existe d'excellentes API pour télécharger/télécharger des données de manière asynchrone. Un qui est très fréquemment utilisé et bien documenté est AFNetworking . Ceci est codé au-dessus de NSURLRequest.
Par exemple, dans votre PHP, vous pouvez récupérer les champs d'une instruction POST comme ceci :
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
Dans votre application, vous pouvez appeler le script PHP avec une requête POST dans AFNetworking comme suit :
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];