【问题标题】:When exporting core data to CSV, how do I also save an image?将核心数据导出为 CSV 时,如何同时保存图像?
【发布时间】:2022-02-04 00:34:26
【问题描述】:

我有一个名为 Item 的实体。我有一个导出功能,可以将所有项目导出为 CSV。所以nameweightquantity 等都被正确导出。这样做的目的是保存数据,以便在删除所有数据后可以稍后导入。 Items 的属性之一是用户从自己的图库中选择的图片。如何导出该图片,以便稍后重新导入?

这是在 iOS 上使用最新的 swift 和 Xcode。

我知道我没有包含任何代码,我主要是问一个方向看。我不确定是否可以获取设备上图像的位置,然后将其保存到 CSV,或者是否有类似的方法。谢谢!

【问题讨论】:

  • 图片是否存储在Core Data中?
  • 是的。但是当我循环浏览这些项目时,它会将所有内容都转换为文本,而这是图像无法做到的。有没有办法获取该图像的位置,以便我可以将其存储为字符串?
  • 如果你将它存储在 Core Data 中,那么你就没有位置(磁盘上文件的路径)。最好将图像存储在核心数据之外,然后只在核心数据中存储路径/url,这将解决 CSV 的问题。
  • 所以应用程序本身正在存储某人的整个项目集合。所以会有很多图片。保存它们还有什么好主意?
  • 如果您将它们存储在 Core Data 之外,例如在 Documents 文件夹或 Application Support 文件夹中,那么您在导出到 CSV 文件时不需要创建它们的副本。或者您根本不复制图像,而是将图像的 url 存储在照片库中。您应该能够在 SO 找到有关这两种方式的问题

标签: ios swift core-data


【解决方案1】:

所以我使用下面的代码解决了这个问题,但我可能创建了一个新问题。我将发布一个新问题以更好地澄清

下面的代码允许我保存到允许我导出和导入图像的文档。

 func saveImage(image: UIImage, string: String) -> Bool {
    guard let data = image.jpegData(compressionQuality: 1) ?? image.pngData() else {
        return false
    }
    guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
        return false
    }
    do {
        print(string)
        try data.write(to: directory.appendingPathComponent(string)!)
        print("Success - \(string)")
        return true
    } catch {
        print(error.localizedDescription)
        return false
    }
}

func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}

【讨论】:

    【解决方案2】:

    CSV 是基于文本的文件格式,但 Images 是二进制数据。所以两者混合不好。

    您可以做的一件事是将图像转换为 Base64 字符串并将该字符串插入 CSV。但是字符串太大,可能会有后果。

    如果您使用的是同一设备(可能不是),您可以获取图像的路径并将其附加到 CSV。

    如果您使用的是数据库,只需将您的图片上传到其中并添加 CSV 的路径即可。 (您甚至可以将图像上传到驱动器并添加路径)

    可能还有其他方法。

    【讨论】:

    • 所以应用程序本身正在存储用户的整个项目集合。目前每件商品有 2 张图片。我存储它们的唯一地方是核心数据,其中一个原因是收集是人们想要隐私的东西。因此,它不会将他们的信息存储在设备本身的任何地方。您能想出一个将它们存储在设备上的位置,以便我在设备上找到位置吗?
    • @TheGoldSpartan 检查此post 和此post 中的答案。这可能会有所帮助。
    猜你喜欢
    • 2012-05-21
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多