如何将 [String: UIImage] 类型的字典存储到 CoreData/UserDefaults 中?
Posted
技术标签:
【中文标题】如何将 [String: UIImage] 类型的字典存储到 CoreData/UserDefaults 中?【英文标题】:How can I store a Dictionary of type [String: UIImage] into 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 显示图像没有任何效果。 除非您使用相关代码和有关您尝试的具体细节更新您的问题,否则没有人可以提供帮助。 【参考方案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]
【讨论】:
以上是关于如何将 [String: UIImage] 类型的字典存储到 CoreData/UserDefaults 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIImage(contentsOfFile:String) 与从 Internet 下载的图像数据一起使用?
如何将 JSON Image-String(不是 url)转换为 UIImage 以供查看
如何将 UIImage 转换为 NSData 或 CFDataRef?
如何解决此错误:无法将类型“__NSCFString”(0x10354a248)的值转换为“UIImage”(0x104c42b48)