2016-11-30 1 views
0

J'ai un problème avec le téléchargement de pdf, l'enregistrement dans le répertoire de documents et le chargement dans la vue web. Je n'ai aucune expérience avec les choses de téléchargement, en sauvegardant des choses dans les répertoires et UIWebView auparavant.Télécharger le PDF, l'enregistrer dans le répertoire de documents et le charger dans UIWebView

Avant de poser cette question, j'ai recherché plusieurs questions sur StackOverflow et fait de mon mieux, mais cela ne fonctionne toujours pas.

First Voilà comment je télécharger le PDF de l'URL et enregistrez-le répertoire document

let myURL = URL(string: "https://example/example/product.pdf") 
let urlRequest = NSURLRequest(url: myURL!) 

do { 
    let theData = try NSURLConnection.sendSynchronousRequest(urlRequest as URLRequest, returning: nil) 
    var docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last as? NSURL 
    docURL = docURL?.appendingPathComponent("my.pdf") as NSURL? 
    try theData.write(to: docURL as! URL) 
    print("downloaded") 
} catch (let writeError) { 
    print("error : \(writeError)") 
} 

Les pauses d'application pendant un certain temps et imprime « chargées »

Voici comment je vérifie la liste des contacts dans le répertoire de mes documents

let docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last) 
     do{ 
      let contents = try (FileManager.default.contentsOfDirectory(at: docURL!, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)) 
      print("There are") 
      print(contents) 
     } 
     catch (let error) 
     { 
      print("error contents \(error)") 
     } 

rints "Il y a [fichier: ///private/var/mobile/Containers/Data/Application/DF6A310C-EB7E-405E-9B1B-654486B5D03A/Documents/my.pdf]"

Voilà comment je charge la pdf en webView

var webView = UIWebView(frame : vc.view.frame) 
webView.scalesPageToFit = true 
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
var documentsDirectory = paths[0] 
var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString 
var targetURL = URL(fileURLWithPath: filePath) 
var request = URLRequest(url: targetURL) 
webView.loadRequest(request) 
vc.view.addSubview(webView) 

Le WebView arrive mais ne montre rien. Je suis vraiment confus si my.pdf est vraiment enregistré avec un format PDF lisible.

Je ne sais pas s'il y a des choses comme je dois ajouter quelque chose dans info.plist ou activer quelque chose dans les capacités de l'application. Merci beaucoup.

+0

En dehors de votre question 'NSURLConnection' est dépréciée utilisation' NSURLSession' maintenant – Rajat

+0

salut @thura oo, si possible, je vous demande de donner votre code de travail comme une réponse de telle sorte que Dans mon cas, j'ai le même scénario que le vôtre mais je n'arrive pas à comprendre comment procéder étape par étape. S'il vous plaît aidez-moi avec votre code. Merci d'avance. – deltami

Répondre

1

Je n'ai pas regardé à travers tout le code, mais les deux lignes suivantes sont un problème:

var filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf").absoluteString 
var targetURL = URL(fileURLWithPath: filePath) 

La valeur de URL absoluteString ne vous donne pas un chemin de fichier de sorte que la valeur de filePath n'est pas valide valeur pour l'initialiseur URL fileURLWithPath:.

Et quel est le point d'aller de URL à String (comme un chemin) et de nouveau à URL? Il suffit de combiner ces deux lignes en:

var targetURL = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("my.pdf") 

À titre indicatif, utilisez une certaine cohérence. Dans un autre code que vous obtenez l'URL du dossier Documents en utilisant:

let docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last) 

et dans tout autre code que vous utilisez:

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
var documentsDirectory = paths[0] 
var ... = URL(fileURLWithPath: documentsDirectory)... 

Choisissez une approche et l'utiliser de manière cohérente. Puisque vous avez besoin d'un URL, utilisez la première approche. Cela signifie que le code que je suggère devrait maintenant être:

let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last! 
let targetURL = docURL.appendingPathComponent("my.pdf") 
+0

Ces lignes de codes sont nouvelles pour moi et j'ai vraiment foiré les écrire. J'ai fait comme tu l'as dit et ça marche maintenant. Merci beaucoup. –

+0

Salut @rmaddy pouvez-vous me guider étape par étape pour 1) comment créer un répertoire 2) comment enregistrer le fichier pdf d'url dans le répertoire nouvellement créé 3) comment partager ce fichier pdf à partir de ce répertoire 4) après le partage est fait supprimer ce répertoire. S'il vous plaît aidez-moi.Si vous voulez que je demande comme une question le fera aussi pour cela. – deltami