Saving an array of images using nsuserdefaults

I have an application in which the user takes a picture, and as soon as the image is taken, it is in a specific one UICollectionView. I keep getting this error:

"cannot invoke 'setObject' with an argument list of type '(UIImage. type, forKey:[UIImage])'"

I looked through the documentation and posts here, but nothing helps. This is my code. (note: I did this only in one case for obvious reasons)

//userdefualts
let defualts = NSUserDefaults.standardUserDefaults()

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

    picker.dismissViewControllerAnimated(true, completion: nil)

    switch currentClothesSelection!{

        case "1":
            shirts.append(info[UIImagePickerControllerOriginalImage] as! UIImage)

            //this is where the error occurs
            defualts.setObject(UIImage.self, forKey: array1)

        case "2" :
            pants.append(info[UIImagePickerControllerOriginalImage] as! UIImage)
        case "3" :
            shorts.append(info[UIImagePickerControllerOriginalImage] as! UIImage)
        case "4" :
            jackets.append(info[UIImagePickerControllerOriginalImage] as! UIImage)
        case "5" :
            shoes.append(info[UIImagePickerControllerOriginalImage] as! UIImage)

        default:
         break
    }

Please, help. Thanks in advance.

+4
source share
2 answers

edit / update:

Xcode 8 beta • Swift 3

It is not recommended to store images in NSUserDefaults, but if you really want to do this, you need to save it as NSData.

value : NSData, NSString, NSNumber, NSDate, NSArray NSDictionary. NSArray NSDictionary

"". NSUserDefaults, :) :

extension UserDefaults {
    func set(image: UIImage?, forKey key: String) {
        guard let image = image else {
            set(nil, forKey: key)
            return
        }
        set(UIImageJPEGRepresentation(image, 1.0), forKey: key)
    }
    func image(forKey key:String) -> UIImage? {
        guard let data = data(forKey: key), image = UIImage(data: data )
            else  { return nil }
        return image
    }
    func set(imageArray value: [UIImage]?, forKey key: String) {
        guard let value = value else {
            set(nil, forKey: key)
            return
        }
        set(NSKeyedArchiver.archivedData(withRootObject: value), forKey: key)
    }
    func imageArray(forKey key:String) -> [UIImage]? {
        guard  let data = data(forKey: key),
            imageArray = NSKeyedUnarchiver.unarchiveObject(with: data) as? [UIImage]
            else { return nil }
        return imageArray
    }
}

:

let myImage = UIImage(data: try! Data(contentsOf: URL(string:"https://i.stack.imgur.com/Xs4RX.jpg")!))!
UserDefaults.standard().set(image: myImage, forKey: "anyKey")
if let myLoadedImage = UserDefaults.standard().image(forKey:"anyKey") {
    print(myLoadedImage.size)  // "(719.0, 808.0)"
}

let myImagesArray = [myImage, myImage]
UserDefaults.standard().set(imageArray: myImagesArray, forKey: "imageArrayKey")
if let myLoadedImages = UserDefaults.standard().imageArray(forKey:"imageArrayKey") {
    print(myLoadedImages.count)  // 2
}
+8

BLOB NSUserDefaults . :

  • NSUserDefaults .
  • CoreData, SQLite Realm . , .
+1

Source: https://habr.com/ru/post/1606017/


All Articles