因此,我一直在研究如何存储图像阵列,目前我正在使用另一种堆栈溢出文章中建议的扩展方法。
extension Array where Element: UIImage {
// Given an array of UIImages return a Data representation of the array suitable for storing in core data as binary data that allows external storage
func coreDataRepresentation() -> ImageArrayRepresentation? {
let CDataArray = NSMutableArray()
for img in self {
guard let imageRepresentation = UIImagePNGRepresentation(img) else {
print("Unable to represent image as PNG")
return nil
}
let data : NSData = NSData(data: imageRepresentation)
CDataArray.add(data)
}
return NSKeyedArchiver.archivedData(withRootObject: CDataArray)
}
}
extension ImageArrayRepresentation {
// Given a Data representation of an array of UIImages return the array
func imageArray() -> ImageArray? {
if let mySavedData = NSKeyedUnarchiver.unarchiveObject(with: self) as? NSArray {
// TODO: Use regular map and return nil if something can't be turned into a UIImage
let imgArray = mySavedData.compactMap({
return UIImage(data: $0 as! Data)
})
return imgArray
}
else {
print("Unable to convert data to ImageArray")
return nil
}
}
}
因此,当我保存数组时,我只需使用images.coreDataRepresentation()
并将其存储在实体的二进制数据属性中即可。
我担心阵列可能包含多达900张图像,并且不断保存所有这些数据会导致延迟。我当时在考虑使用与关系数据库类似的系统,在该系统中,我保留一个单独的核心数据实体来仅保存具有基于id的关系的这些照片,但是,在进行了更多研究之后,我发现对于核心数据不建议这样做。有一个更好的方法吗?还是其中一种方法更好?