Ios 在CoreData中存储图像序列
我尝试使用CoreData存储图像。它很好,我可以存储单个图像。但是,如何将其转换为多个图像 目前,我已将图像字段设置为二进制数据 我通过以下方式将图像保存到对象中:Ios 在CoreData中存储图像序列,ios,swift,core-data,Ios,Swift,Core Data,我尝试使用CoreData存储图像。它很好,我可以存储单个图像。但是,如何将其转换为多个图像 目前,我已将图像字段设置为二进制数据 我通过以下方式将图像保存到对象中: let imageData = UIImage(imageLiteralResourceName: "Dummy1").jpegData(compressionQuality: 1) item.image = imageData try? self.viewContext.save() 如何将其转换为可以存
let imageData = UIImage(imageLiteralResourceName: "Dummy1").jpegData(compressionQuality: 1)
item.image = imageData
try? self.viewContext.save()
如何将其转换为可以存储在CoreData中的imageData数组
我试图这样做,但失败了:
let imageData1 = UIImage(imageLiteralResourceName: "Dummy1").jpegData(compressionQuality: 1)
let imageData2 = UIImage(imageLiteralResourceName: "Dummy2").jpegData(compressionQuality: 1)
item.image = [imageData1, imageData2]
try ? self.viewContext.save()
编译器说属性“image”是数据?但不是[数据]?类型
我还尝试使用可转换类型:
然而,有一个警告:
警告:配置错误的属性:Items.imageArray正在使用零或不安全的值转换器。请切换到NSSecureUnarchiveFromDataTransformerName或NSSecureUnarchiveFromDataTransformer的自定义NSValueTransformer子类
对警告有什么想法,以及如何解决
在使用可转换类型时,实际上我可以做到:
let imageData1 = UIImage(imageLiteralResourceName: "Dummy1").jpegData(compressionQuality: 1)
let imageData2 = UIImage(imageLiteralResourceName: "Dummy2").jpegData(compressionQuality: 1)
item.image = imageData1
item.imageArray = [imageData1!, imageData2!]
然而,这里有几个问题:
- 它迫使我们添加!对于imageData,在我的情况下,它确实应该是可选的,我没有办法使用??正确地给它一个虚拟的imageData,如果它被发现为零
Image(uiImage: UIImage(data: (self.item.imageArray![0]))!)
.frame(width:300, height:300)
你可以看到我添加了!到两个imageArray!可以是零,也可以是UIImage
我想为这两种情况提供默认值,但我未能使用??以提供默认值。有什么想法吗?您不应该直接将图像保存在数据库中,这样会遇到很大的性能问题 而是将图像名称保存在数据库中,并将实际图像保存在存储器中
然后,您可以从文件管理器加载图像。您正试图将方形木钉塞入圆孔中。不能将数据数组指定给数据属性或可转换属性,因为数据数组既不是数据也不是可转换属性 您可以做的是使您的属性与另一个实体建立一对多关系,我们称之为
ImageContainer
,另一个实体将具有imageData
属性。现在,您可以将尽可能多的图像(在图像容器中)添加到对象中
另一种选择是使用可转换值,据我所知,它使用NSSecureCoding
将您的值转换为CoreData可以理解的内容