Der er flere måder at gøre det på. For det første er det vigtigt at bemærke, at dataWithContentsOfURL
er ikke en asynkron anmodning. Det betyder, at hvis du bruger det til at overføre store data, er der en god chance for, at du fryser appen. For async-anmodninger skal du bruge NSURLRequest.
Når det er sagt, er der fremragende API til at uploade/downloade data asynkront. En som er meget hyppigt brugt og veldokumenteret er AFNetworking . Dette er kodet oven på NSURLRequest.
For eksempel kan du i din PHP hente felterne fra en POST-sætning som denne:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
I din app kan du kalde PHP-scriptet med en POST-anmodning i AFNetworking som følger:
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];