Je cherche encore la meilleure méthode pour sauvegarder une image dans realm.
J’ai tenté de sauvegardé l’image en data, mais j’ai une erreur.
J’ai créé une class “post” avec une Dynamic var dataOfImage = Data()
une fois l’image récupéré avec imagePicker je la sauvegarde en tant que data :
let dataOfImagePicked = Data(value: UIImageJPEGRepresentation(pickedImage,0.9)!)
post1.dataOfImage = dataOfImagePicked
J’ajoute mon post1 dans realm et lorsque je veux recharger cette image par la suite avec :
let img = UIImage.imageWithData(post1.dataOfImage)
photoPicked.image = img
j’ai l’erreur "Cannot convert value of type ‘Data’ to expected argument type ‘Data’"
Quelque chose m’échappe… Je me suis inspiré d’un post StackOverflow avec swift 2, aurait-ce changé depuis ?
if let data = post1.dataIfImage as? Data{
let img = Uiimage(data:data)
}
Je suis en trin de me demander si il et possible d’enregistrer de la data sur realm, ce que tu peu fair c’est traduire ton image en string via Base64 string.
En règle générale il est toujours déconseillé de sauvegarder des données binaires dans une base de données. C’est très lent et peu fonctionnel.
Le mieux et de sauvegarder ton image dans un fichier dans ton dossier documents et d’enregistrer le chemin du fichier (string) dans ta base de données.
J’ai essayé ta 2ème proposition @Samir mais j’obtiens la même erreur malheureusement. @mbritto mon problème et que l’image sauvegardé doit pouvoir être accessible en ligne à l’avenir, je ne peux donc pas la sauvegarder dans mon dossier document. Une idée d’alternative ?
J’ai essayé de passer par l’encodage en string de l’image
let dataOfImagePicked = UIImagePNGRepresentation(pickedImage)
let stringDataImage = dataOfImagePicked?.base64EncodedString(options: .lineLength64Characters)
post1.dataOfImage = stringDataImage!
et lors du décodage :
let dataDecode = NSData(base64Encoded: postList[1].dataOfImage, options:.ignoreUnknownCharacters)!
let avatarImage = UIImage(data: dataDecode as Data)
photoPicked.image = avatarImage
J’ai l’erreur “Cannot convert value of type ‘NSData’ to type ‘Data’ in coercion”. Je ne comprend pas bien ce que cela signifie
Effectivement la solution de maxime est beaucoup mieux.
Voilà mon idée,
donée une id à ton image, en la renoman avec un grand nombre aléatoire , exemple : 10200332032348382.png
stocker l’id dans ta base
uploader ton image dans un dossier image dans ton serveur ,
Quand l’app doit afficher l’image, tu récupère l’id de l’image dans la base, tu construit ensuite l’url de l’image “www.monserveru/(id).png”, et l’app la télécharge, avec alamofireimage ou autre par exemple.
En effet je ne crois pas que Realm supporte l’upload de fichiers pour le moment Tu vas donc devoir uploader tes fichiers autrement sur ton serveur puis les rendre accessibles en téléchargement.