【问题标题】:Save image to core data while selecting image from photo album从相册中选择图像时将图像保存到核心数据
【发布时间】:2017-11-11 03:25:02
【问题描述】:

我已经使用 Eureka 创建了一个表单,并且我已经安装了图像框架。我添加了一个图像行,但我正在努力将图像保存到 coredata。

  • coredata中的属性设置为二进制数据
  • 根据我的用户表单的工作方式,我需要全局声明我的图像变量。

我认为我的问题是连接NSdataUIImage 之间的关系。我找到的教程通过UIImagePNGRepresentation 处理这个问题。但他们知道图像文件名。我从照片中选择文件时不知道这一点。

全局变量 = var otsPhoto: NSData? = nil

表单域

   <<< ImageRow() {
            $0.title = "Attachment"
            $0.sourceTypes = [.PhotoLibrary, .SavedPhotosAlbum, .Camera] //1
            $0.value = otsPhoto //2
            $0.clearAction = .yes(style: .destructive) //3
            $0.onChange { [unowned self] row in //4
                self.otsPhoto = row.value
            }

返回 2 个错误

1) 不能分配值类型 NSData?键入 UIImage?

2) 无法将 (_) 类型的值 -> 转换为预期参数

【问题讨论】:

  • 将 UIImage 转换为 Data 而不保存到文件的唯一方法是使用 ImageIO 框架。或者,如果这已经作为资产在照片库中,请向资产索取其数据。
  • 但是,我认为将图像保存到 Core Data 中并不明智。
  • 我一直在寻找,我想我必须想出一个新计划。保存图像的最佳方式是什么。
  • 为什么要这样做?它已经保存在照片库中,不是吗?您只需要保留它的标识符。
  • 我似乎还有更多的搜索和学习要做

标签: ios swift core-data


【解决方案1】:

不建议将图像存储到 Sqlite 文件中。最好的方法是:

  1. 使用UIImagePickerController从照片中复制图像 到应用程序包或从服务器下载图像到 应用程序包。
  2. 从应用程序包中获取存储图像的路径。 (当您存储在应用程序包中的某个位置时,您已经知道这一点)
  3. 将此路径作为字符串存储在您的表中

这样,即使照片从照片中删除,您的应用中也会有它的副本。

一些资源

https://developer.apple.com/documentation/uikit/uiimagepickercontroller https://developer.apple.com/documentation/foundation/nsfilemanager

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多