stockage des données
Bonjour,
je cherche des informations sur le ou les endroits où sont stockées les données d'une application.
dans mon cas, en particuliers des images.
Dans mon application, je télécharge une image vers un répertoire avec ces instructions :
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if paths.count > 0 {
documentsDirectory = paths[0]
let savePath = documentsDirectory! + "/" + "Apnee_noire.jpg"
Le répertoire en question est du genre :
/Users/jean-luc/Library/Developer/CoreSimulator/Devices/F6BB6DD1-073A-42B0-9162-46C769E26326/data/Containers/Data/Application/E78254D8-D48E-4D5D-B981-44B8E1E7C4A1/Documents/Apnee_noire.jpg
Je peux par ailleurs retrouver ce fichier et le supprimer.
Mais il se trouve que même après sa suppression, cette image s'affiche encore.
Si je modifie l'image dans le répertoire source, c'est toujours l'ancienne version qui s'affiche (même après redémarrage du programme).
Pour afficher la version modifiée, il faut que je supprime l'application et la réinstalle.
J'ai aussi essayé de supprimer, sans succès, des fichiers temporaires avec ces instructions
FileManager.default.clearTmpDirectory()
extension FileManager {
func clearTmpDirectory() {
do {
print("clear temporary directories")
let tmpDirURL = FileManager.default.temporaryDirectory
let tmpDirectory = try contentsOfDirectory(atPath: tmpDirURL.path)
try tmpDirectory.forEach { file in
let fileUrl = tmpDirURL.appendingPathComponent(file)
try removeItem(atPath: fileUrl.path)
}
} catch {
//catch the error somehow
}
}
}
merci
Réponses
Bonjour,
Ton explication n'est pas très claire.
Est-ce une image que tu obtiens en dehors de ton programme et que tu enregistres dedans ?
Ce qui me fait dire cela : "je télécharge une image vers" et "savePath"
Si oui, comme écris-tu l'image dans ta sandbox ?
Est-ce que tu ne recharges pas l'image depuis l'extérieur ?
D'où vient l'image modifiée ?
...??
À mon avis, le problème est ailleurs. Voici ma théorie.
NSURLSession et NSURLConnection utilisent un cache sur le disque. Tant que la ressource dans le cache est valide, elle n'est pas re-téléchargée.
Si tu changes l'image sur le serveur, mais que l'URL est toujours la même et que le serveur ne spécifie pas de date d'expiration, tu obtiendras l'image en cache. Ça expliquerait pourquoi tu as bien la nouvelle image quand tu supprimes l'application: ça supprimerait le cache en même temps.
Céroce,
ton explication me paraît cohérente avec le fonctionnement. Mais peux-t-on vider le cache?
Eric P.
Je télécharge l'image depuis le répertoire Web d'un NAS.
le code de téléchargement est le suivant :
func imageUpLoad(adresseImage: String) {
let urlStr = "http://xxx.xxx.xxx.xxx/Couvertures_Livres/" + adresseImage
let url = URL(string: urlStr)
Et l'image est stockée dans le répertoire
/Users/jean-luc/Library/Developer/CoreSimulator/Devices/F6BB6DD1-073A-42B0-9162-46C769E26326/data/Containers/Data/Application/E78254D8-D48E-4D5D-B981-44B8E1E7C4A1/Documents/Apnee_noire.jpg
Sans doute, mais il ne faut pas. Le cache est utile ! Il économise la batterie, la bande passante, et accélère l'affichage.
Reconsidère ton utilisation de HTTP. Soit le serveur fixe la date de péremption dans le header Expires, soit l'URL de la ressource est différente s'il s'agit d'une ressource (image) différente.