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!
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..
}
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
}