Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在CoreData中存储图像序列_Ios_Swift_Core Data - Fatal编程技术网

Ios 在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() 如何将其转换为可以存

我尝试使用CoreData存储图像。它很好,我可以存储单个图像。但是,如何将其转换为多个图像

目前,我已将图像字段设置为二进制数据

我通过以下方式将图像保存到对象中:

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可以理解的内容