Je veux partager mon expérience, au cas où quelqu'un d'autre serait dérouté par ce problème.
Testé sur iOS 10-11, Xcode 9.2 et Swift 3.2.
Réponse courte : si vous enregistrez un chemin d'accès à un fichier sur le disque, vous pouvez résoudre le problème en n'y incluant pas le répertoire Documents. Au lieu de cela, chaque fois que vous devez récupérer le fichier avec le chemin d'accès enregistré, récupérez le répertoire Documents et ajoutez le chemin d'accès.
Pour une application iOS, je sauvegardais une image dans .../Documents/Photos par le biais de l'URL relative, disons url
. Lors de l'enregistrement de l'image, un chemin, par exemple url.path
a également été sauvegardé dans une entité Core Data.
Quand j'ai ensuite essayé de récupérer l'image par FileManager.default.fileExists(atPath: url.path)
il renvoie toujours false.
Je testais l'application sur mon iPhone. Il s'est avéré que, pour une raison quelconque, chaque fois que j'ai lancé l'application à partir de Xcode, le dossier d'identification de l'application a changé !
Donc :
- Application ouverte depuis Xcode -> Image sauvegardée -> application fermée -> application ouverte depuis le dispositif physique -> fileExists -> VRAI
- Application ouverte depuis Xcode -> Image sauvegardée -> application fermée -> application ouverte depuis Xcode -> fileExists -> FALSE
Vous pouvez vérifier si c'est votre cas en obtenant et en imprimant le chemin du dossier du document (ou l'URL, peu importe) et en le comparant avec le chemin (ou l'URL) enregistré. Si vous obtenez quelque chose comme ceci :
- /var/mobile/Containers/Data/Application/ 5D4632AE-C432-4D37-A3F7-ECD05716AD8A /Documents..
- /var/mobile/Containers/Data/Application/ D09904C3-D80D-48EB-ACFB-1E42D878AFA4 /Documents..
vous avez trouvé le problème.
0 votes
Pointez-vous vers l'emplacement exact où le fichier existe ?
2 votes
Quelle est la valeur de filePath ? Commence-t-elle par ~ ? Si oui, vous devez d'abord appeler expandingTildeInPath
0 votes
@user3608500 Oui, pointe vers un fichier exact, je veux juger que ce fichier existe.
0 votes
@mlidal commence par "/Users/De...."
1 votes
Peut-être que le chemin n'est pas correct ? vérifiez l'url.
0 votes
Comment obtenez-vous
self.fileManager
? Il se peut que le problème soit lié à cela d'une manière ou d'une autre.