【问题标题】:saving image with Core Data使用 Core Data 保存图像
【发布时间】:2018-10-28 08:35:09
【问题描述】:

我正在尝试使用 CoreData 保存用户个人资料图片,但不知道如何继续。

我知道我必须创建一个实体,并且我读到它必须是 BinaryData 类型,但是我不明白如何保存和加载它。

我试过这样:

let profilePicture = UserPicture(context: AppDelegate.viewContext)
profilePicture.userProfilePicture = profilPictureImageView.image?.pngData()
    try? AppDelegate.viewContext.save()

但不起作用。 我没有找到任何足够清楚的帮助我。

【问题讨论】:

  • Core Data save UIImage的可能重复
  • 您不应将完整图像存储在 Core Data 中。 相反,您应该将图像保存在Documents Directory 中,并将该图像的路径保存在Core Data
  • @ShubhamBakshi 您可以将图像添加到 Core Data 并为 Core Data 实体中的属性选择“使用外部文件”选项;然后,Core Data 将为您管理对 BLOB 的引用,包括在从 Core Data 中删除对象时删除文件。这比自己管理引用更简单
  • @Paulw11 谢谢,我不知道。非常感谢队友!

标签: ios swift core-data swift4


【解决方案1】:

要在 CoreData 中保存图像,您必须将图像转换为 DATA 类型,然后才能将其保存到 CoreData。此代码可能对在 CoreData 中保存图像有用。

@IBOutlet weak var profileimg: UIImageView?

let data = (profileimg?.image)!.pngData()
let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
let newUser = NSEntityDescription.insertNewObject(forEntityName: "Entity", into: context!)
newUser.setValue(data, forKey: "img")

do {
    try Constant.context?.save()
}

确保您输入的密钥正确。必须勾选数据模型检查器中允许外部存储的复选框。但我不建议将图像保存在 CoreData 中。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以将图像转换为字符串并将它们存储在核心数据中。

    self.selectedImage?.jpegData(compressionQuality: 1)?.base64EncodedString()
    

    并使用此代码从核心数据加载图像

     if let decodedData = Data(base64Encoded: todo.img as! String, options: .ignoreUnknownCharacters) {
       let image = UIImage(data: decodedData)
       Image(uiImage: image!)}
    

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多