Có một số cách để làm điều đó. Đầu tiên, điều quan trọng cần lưu ý là dataWithContentsOfURL
không phải là một yêu cầu không đồng bộ. Có nghĩa là nếu bạn sử dụng nó để truyền dữ liệu lớn, rất có thể bạn sẽ đóng băng ứng dụng. Đối với các yêu cầu không đồng bộ, bạn nên sử dụng NSURLRequest.
Phải nói rằng, có những API tuyệt vời để tải lên / tải xuống dữ liệu không đồng bộ. Một cái được sử dụng rất thường xuyên và được ghi lại nhiều là AFNetworking . Điều này được mã hóa trên NSURLRequest.
Ví dụ:trong PHP của bạn, bạn có thể truy xuất các trường từ một câu lệnh POST như sau:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
Trong ứng dụng của mình, bạn có thể gọi tập lệnh PHP với yêu cầu ĐĂNG trong AFNetworking như sau:
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];