【问题标题】:How can I store a Dictionary of type [String: UIImage] into CoreData/UserDefaults?如何将 [String: UIImage] 类型的字典存储到 CoreData/UserDefaults 中?
【发布时间】:2017-02-02 19:34:52
【问题描述】:

我有一个字典 offlineImages = [String: UIImage](),我想将它存储到 CoreData/UserDefaults 中。我该怎么做?最好的选择是什么?

尝试使用文件系统,但图像不会显示(offlineImages 数组包含图像的本地 URL):

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "offlineCell")
    let mainImageView = cell?.viewWithTag(2) as! UIImageView
    let mainImageURL = offlineImages[indexPath.row]
    let mainImageData = NSData(contentsOf: mainImageURL)
    let mainImage = UIImage(data: mainImageData! as Data)
    mainImageView.image = mainImage
    return cell!
}

【问题讨论】:

  • 不要。将图像写入文件系统。并且永远不要将那么多数据写入 NSUserDefaults。它适用于少量数据。
  • @rmaddy,如何将其存储到 CoreData 中?
  • 你没有。将图像写入文件系统。只需将文件名存储在核心数据中。
  • 我试过了,但尝试通过其本地 URL 显示图像没有任何效果。
  • 除非您使用相关代码和有关您尝试的具体细节更新您的问题,否则没有人可以提供帮助。

标签: ios swift


【解决方案1】:

在 .xcdatamodeld 文件中为您的字典创建属性,类型为 Transformable。然后在生成的实体子类中将类型从 id 更改为 Dictionary

【讨论】:

  • 对不起,我不明白“生成的 CoreData 子类”是什么意思。
  • 用属性设置实体后,您需要为它们生成子类。这是你做的吗?
  • 还没有。我不完全知道如何使用 CoreData。我看过一个教程,但它只适用于字符串。
【解决方案2】:

您可以像这样将 Image 转换为 NSData 并存储到 CoreData(二进制数据)中

 NSData *imageData = UIImagePNGRepresentation(image);

 [selectedObject setValue:imageData forKey:@"imageEntity"]; // selectedObject refers to NSManagedObject

并获取图片

NSManagedObject *selectedObj = [[self fetchedResultsController] objectAtIndexPath:indexPath];
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]];
[self.imageView setImage:image]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多