Jest na to kilka sposobów. Po pierwsze, należy zauważyć, że dataWithContentsOfURL
nie jest żądaniem asynchronicznym. Oznacza to, że jeśli użyjesz go do przesyłania dużych danych, istnieje duża szansa, że zamrozisz aplikację. W przypadku żądań asynchronicznych należy użyć NSURLRequest.
To powiedziawszy, istnieją doskonałe API do asynchronicznego przesyłania/pobierania danych. Jednym, który jest bardzo często używany i dobrze udokumentowany, jest AFNetworking . Jest to zakodowane na górze NSURLRequest.
Na przykład w swoim PHP możesz pobrać pola z instrukcji POST w następujący sposób:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
W swojej aplikacji możesz wywołać skrypt PHP z żądaniem POST w AFNetworking w następujący sposób:
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];