Chargement d'une photo à partir d'un fichier en local

Bonjour,
Je n'arrive pas à charger une photo dans une image view.
La photo se trouve dans un dossier de l'ordinateur. J'ai déjà eu à le faire plein de fois et cela fonctionnait, la différence était que l'image se trouvait dans le dossier de l'application, mais je ne vois pas pourquoi il y aurait un problème dans ce cas.
Voici mon code :

     let fileUrl = NSURL(fileURLWithPath: "Users/helio/Documents/Photos/IMG0001.jpeg")
     let imageData:NSData = NSData(contentsOf: fileUrl as URL)!       
     let image = NSImage(data: imageData as Data)
     self.imageView.image = image

Cela plante au niveau de la ligne NSData.
Merci de votre aide.

Mots clés:

Réponses

  • @helio a dit :
    Cela plante au niveau de la ligne NSData.

    C'est à dire ? NSData retourne nil ?
    Est-ce que ce ne serait pas un problème de Sandboxing ?
    En plus, pour accéder à Documents, il est préférable de ne pas coder l'URL en dur, mais de passer par :

    let documentUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let fileUrl = documentUrl.appendingPathComponent("Photos/IMG0001.jpeg")
    
  • Je venais de trouver le problème et c'est bien comme tu l'indiques, un problème de Sandboxing !
    Je vais adapter le code comme tu me le conseilles.
    Merci.

  • devulderdevulder Membre
    novembre 2023 modifié #4

    Pour compléter tu peux tester si le fichier existe avant de l'ouvrir

    let fileManager = FileManager.default
    
    let documentUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let fileUrl = documentUrl.appendingPathComponent("Photos/IMG0001.jpeg")
    if fileManager.fileExists(atPath: fileURL.path) {
     } 
    
  • LarmeLarme Membre
    novembre 2023 modifié #5

    Petite remarque :
    Si tu utilises un Swift assez récent, préfères utiliser les versions sans NS si possible: Data vs NSData, URL vs NSURL, cela t'évitera les as que tu fais par exemple.

Connectez-vous ou Inscrivez-vous pour répondre.