【问题标题】:how to store [UIImage] into Core Data and retrieve to [UIImage] from binary date如何将 [UIImage] 存储到 Core Data 并从二进制日期检索到 [UIImage]
【发布时间】:2020-07-22 07:59:44
【问题描述】:

我的代码是这样的:

     //save to core data  
     func addPaper(){
        let paper = Paper(context: self.context)
        
        paper.id = UUID()
        paper.subject = self.subject
        paper.score = Float(self.score) ?? 0
        paper.title = self.title
        let imgs = try? NSKeyedArchiver.archivedData(withRootObject: self.images, requiringSecureCoding: true)
        paper.images = imgs
        try? self.context.save()
    }
//retrieve to [UIImage]


  let imgs = NSKeyedUnarchiver.unarchivedObject(ofClass: [UIImage], from: paper.images!)

有错误提示:静态方法'unarchivedObject(ofClass:from:)'要求'[UIImage]'符合'NSCoding'

我不知道下一步该怎么做,有人可以帮我吗?

【问题讨论】:

  • 您不应该将图像存储在 coredata 中...将它们存储在目录中并将 url 路径保存在 coredata 中
  • 您不能使用 NSKeyedArchiver 将 UIImage 转换为 Data。这不应该先抛出错误吗?您需要使用 JPEG 或 PNG 转换,然后您将拥有数据。
  • 保存到核心数据没有错误,

标签: swift core-data


【解决方案1】:

您不应该将图像存储在 CoreData 中。也许以base64格式存储,你可以随时编码/解码。

Base64 转图像:

func base64ToImage(data: String) -> Data{
    let encodedImageData = data
    let imageData = Data(base64Encoded: encodedImageData)
        
    return imageData!
 }

imageView.image = UIImage(data: dataDecoded)

图片转base64

func imageToBase64(image: UIImage) -> String {
    return image.pngData()!
        .base64EncodedString()
}

【讨论】:

  • 我认为你在 swift 3 中发布了解决方案
  • 谢谢,这是一个旧的 sn-p :)
  • 我想用 UIImage 存储整个数组
  • 我可以将任何对象存储到 CoreData 中吗?
【解决方案2】:

也许你需要这个,任何对象都可以保存到核心数据中。 :https://stackoverflow.com/questions/56453857/how-to-save-existing-objects-to-core-data

我从其他人那里复制了以下步骤,希望对您有所帮助

1.使您的自定义类型(练习)成为 NSObject 的子类

2.将核心数据模型中的属性类型设置为Transformable

3.将CustomClass设置为[Exercise]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多