83 votes

Enregistrer les images dans NSUserDefaults ?

Est-il possible d'enregistrer des images dans NSUserDefaults en tant qu'objet, puis de les récupérer pour une utilisation ultérieure ?

139voto

Bonny Points 1113

Pour enregistrer une image dans NSUserDefaults :

 [[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:key];

Pour récupérer une image à partir de NSUserDefaults :

 NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key];
UIImage* image = [UIImage imageWithData:imageData];

11voto

Bilal Şimşek Points 163

Pour Swift 4

J'ai presque tout essayé dans cette question mais personne n'est travaillé pour moi. et j'ai trouvé ma solution. J'ai d'abord créé une extension pour UserDefaults comme ci-dessous, puis j'ai juste appelé les méthodes get et set.

 extension UserDefaults {
    func imageForKey(key: String) -> UIImage? {
        var image: UIImage?
        if let imageData = data(forKey: key) {
            image = NSKeyedUnarchiver.unarchiveObject(with: imageData) as? UIImage
        }
        return image
    }
    func setImage(image: UIImage?, forKey key: String) {
        var imageData: NSData?
        if let image = image {
            imageData = NSKeyedArchiver.archivedData(withRootObject: image) as NSData?
        }
        set(imageData, forKey: key)
    } 
}

pour définir l'image comme arrière-plan dans settingsVC, j'ai utilisé le code ci-dessous.

 let croppedImage = cropImage(selectedImage, toRect: rect, viewWidth: self.view.bounds.size.width, viewHeight: self.view.bounds.size.width)

imageDefaults.setImage(image: croppedImage, forKey: "imageDefaults")

dans mainVC :

 let bgImage = imageDefaults.imageForKey(key: "imageDefaults")!

8voto

alicanbatur Points 1122

Pour véloce 2.2

Ranger:

 NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)

À récupérer:

 if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
            let image = UIImage(data: imageData as! NSData){
            // use your image here...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X