2017-10-18 14 views
0

Je rencontre un problème lors de l'obtention du chemin/l'URL d'un fichier dans un lot. Voici un code que j'utiliseImpossible d'accéder à un fichier dans un lot

@IBOutlet weak var testWebView: UIWebView! 

private func setText() { 

if let path = Bundle.main.path(forResource: "theory", ofType: "pdf") { 
    let url = NSURL(fileURLWithPath: path) 
    let request = NSURLRequest(url: url as URL) 
    testWebView.loadRequest(request as URLRequest) 
} 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // setText() 
} 

override func viewDidAppear(_ animated: Bool) { 
super.viewDidAppear(animated) 
setText() 
} 

le fichier theory.pdf est dans le faisceau principal (pas les sous-dossiers, etc.) j'ai essayé plusieurs façons discutées ici, comme la copie avec Créer un groupe/Créer un dossier de référence, etc. - rien n'a aidé. WebView est défini dans StoryBoard.

+1

L'ensemble d'appartenance cible du fichier? L'orthographe est-elle correcte? Par ailleurs, utilisez 'Bundle.main.url (forResource: withExtension:)', ('URL') et' URLRequest' pour éviter les lancers de ponts moche. – vadian

+0

Pour ouvrir une ressource de fichier locale avec WKWebView, vous devez utiliser loadfileurl https://developer.apple.com/documentation/webkit/wkwebview/1414973-loadfileurl –

+0

Pour prévisualiser un pdf https://stackoverflow.com/a/34148055/2303865 –

Répondre

0

Si votre objectif est de montrer un PDF Je vous suggère fortement d'utiliser un UIDocumentInteractionController

class ViewController: UIViewController { 

    private var documentInteractionController: UIDocumentInteractionController? 

    private func setText() { 
     if let path = Bundle.main.path(forResource: "theory", ofType: "pdf") { 
      let url = URL(fileURLWithPath: path) 
      let controller = UIDocumentInteractionController(url: url) 
      controller.delegate = self 
      controller.presentPreview(animated: true) 
      documentInteractionController = controller 
     } 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     setText() 
    } 

} 

vous devez également mettre en œuvre le UIDocumentInteractionControllerDelegate:

extension ViewController: UIDocumentInteractionControllerDelegate { 

    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController { 
     return self 
    } 

} 
+0

Cela va en fait ouvrir une autre application Je recommanderais d'utiliser QLPreviewController ou PDFKit (iOS 11+) –

+0

Merci, bien sûr que ce serait mieux, mais mon problème est que le chemin ne reçoit rien de Bundle.main.url/path.Je n'ai pas pu passer par cette ligne de code :-( –

+0

iOS est sensible à la casse, donc le fichier doit correspondre exactement la théorie.pdf. En ajoutant le fichier au projet, vous devez vous assurer qu'il est copié sur l'ensemble lorsque l'ensemble est empaqueté. Vous pouvez vérifier cela en accédant aux Phases de construction cible> Copier les ressources de l'ensemble. Le fichier doit être sur la liste. Si ce n'est pas le cas, vous pouvez l'ajouter en utilisant le signe + ou en le sélectionnant dans le navigateur de projet et en le vérifiant sur l'appartenance cible. – mt81

0

Merci à tous les gars. J'ai réglé le problème. Au lieu de faire glisser le PDF dans l'ensemble, j'ai cliqué droit sur le navigateur de projet et sélectionné ajouter des fichiers à ... Ensuite, sur le fichier téléchargé à nouveau cliqué et sélectionnez ajouter .... Enfin, cela a fonctionné. Merci encore. Maintenant, je vais expérimenter avec vos propositions.