Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you save an array of images in core data?

I know you can save one by using the binary data property of an entity but is it possible to save multiple?

you can save one by using this:

UIImageJPEGRepresentation(image: UIImage)

you can save it and then transform it into an image again with

UIImage(data: ____)

but can I transform an array full of images into binary data?

If you can't with core data, any other ways I can do it?

BTW, the image array is full of user taken image saved on the device..

Thanks for all the helpers!

like image 766
arbel03 Avatar asked Sep 04 '25 17:09

arbel03


1 Answers

convert your array to NSMutableArray and archive it as NSData

var imgArray = [UIImage]();

var CDataArray = NSMutableArray();

for img in imgArray{
    let data : NSData = NSData(data: UIImagePNGRepresentation(img))
    CDataArray.addObject(data);
}

//convert the Array to NSData
//you can save this in core data
var coreDataObject = NSKeyedArchiver.archivedDataWithRootObject(CDataArray);

after pulling from CData, extract data:

//extract:
if let mySavedData = NSKeyedUnarchiver.unarchiveObjectWithData(coreDataObject) as? NSArray{
    //extract data..
}

Swift 5

There are some methods deprecated now. The following code is working in Swift 5:

func coreDataObjectFromImages(images: [UIImage]) -> Data? {
    let dataArray = NSMutableArray()
    
    for img in images {
        if let data = img.pngData() {
            dataArray.add(data)
        }
    }
    
    return try? NSKeyedArchiver.archivedData(withRootObject: dataArray, requiringSecureCoding: true)
}

func imagesFromCoreData(object: Data?) -> [UIImage]? {
    var retVal = [UIImage]()

    guard let object = object else { return nil }
    if let dataArray = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NSArray.self, from: object) {
        for data in dataArray {
            if let data = data as? Data, let image = UIImage(data: data) {
                retVal.append(image)
            }
        }
    }
    
    return retVal
}
like image 120
Daniel Krom Avatar answered Sep 07 '25 09:09

Daniel Krom