Es gibt mehrere Möglichkeiten, dies zu tun. Zunächst ist es wichtig zu beachten, dass dataWithContentsOfURL
ist keine asynchrone Anfrage. Das heißt, wenn Sie damit große Datenmengen übertragen, besteht eine gute Chance, dass Sie die App einfrieren. Für asynchrone Anfragen sollten Sie NSURLRequest.
Allerdings gibt es hervorragende APIs zum asynchronen Hoch-/Herunterladen von Daten. Eines, das sehr häufig verwendet wird und gut dokumentiert ist, ist AFNetworking . Dies wird über NSURLRequest codiert.
Beispielsweise können Sie in Ihrem PHP die Felder aus einer POST-Anweisung wie folgt abrufen:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
In Ihrer App können Sie das PHP-Skript mit einer POST-Anfrage in AFNetworking wie folgt aufrufen:
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];