Swift:将UIImage保存并检索到CoreData中

时间:2018-10-26 06:16:16

标签: ios swift xcode core-data uiimagepickercontroller

我想将从UIImagePickerCollector获得的UIImage保存到Binary Data类型的CoreData属性“ img”中。我只是尝试使用以下代码进行保存。

let sampleimage = profileimg?.image
    var dataImage: Data? = nil
    if let aSampleimage = sampleimage {
        dataImage = aSampleimage.jpegData(compressionQuality: 0.0)
    }

    let imag = Data()

    let newUser = NSEntityDescription.insertNewObject(forEntityName: "Person", into: Constant.context!)

    newUser.setValue(self.txtName!.text, forKey: Constant.CDName)
    newUser.setValue(self.txtEmail!.text, forKey: Constant.CDEmail)
    newUser.setValue(self.txtPassword!.text, forKey: Constant.CDPassword)
    newUser.setValue(yourDate, forKey: Constant.CDDob)
    newUser.setValue(imag, forKey: Constant.CDImage)

当我尝试运行时,它没有显示任何错误。但是我不知道图像是否保存在CoreData中。我该如何检查?

当我尝试将图像分配到表格视图单元格时,它显示以下错误。请证明正确的解决方案。

2 个答案:

答案 0 :(得分:0)

您遇到NSDataUIImage的转换错误。尝试使用 UIImage(data:imageData,scale:1.0)假定图像的比例为1。

对于您来说,编码可能类似于:

if let imgData = obj.img {
    cell.listImg.image = UIImage(data:imgData, scale:1.0) //presuming the image's scale is 1
}

其他变化可能是

if let imgData = obj.img {
    cell.listImg.image = UIImage(data: imgData)
}

保存图像,在语句newUser.setValue(imag, forKey: Constant.CDImage)中,您使用的是imag,但是实际图像包含在dataImage中。请更正

newUser.setValue(imag, forKey: Constant.CDImage)

newUser.setValue(dataImage, forKey: Constant.CDImage)

此外,对于共享代码,我看不到let imag = Data()的任何使用,如果未在共享代码的一部分之外使用它,则可以将其删除。

答案 1 :(得分:0)

如果要保存图像,可以将字段设置为“二进制数据”,并且必须转换并保存到核心数据

  

UIImage到数据

if image != nil{
   let data = UIImagePNGRepresentation(image!)
}

以及获取时

  

数据到UIImage

if data != nil{
   let image = UIImage(data:data)
}

如此,您必须创建coredata实体的对象,然后必须将字段创建为二进制数据并保存UIImage的数据,当您要获取时,再次需要将数据转换为图像并分配给您UIImageview。