存储 UIImages 的持久数组 - CoreData 还是在磁盘上?
Posted
技术标签:
【中文标题】存储 UIImages 的持久数组 - CoreData 还是在磁盘上?【英文标题】:Storing a persistent array of UIImages - CoreData or on disk? 【发布时间】:2013-02-26 21:05:11 【问题描述】:在我的应用程序中,我将拥有最多 50 张可供人们维护的图像数组。他们可以选择创建新图像或删除现有图像。每张图片都会有一些与之相关的东西,例如评分。
我的问题是我应该如何存储它们。我应该创建一个名为“Image”的 CoreData 实体并以这种方式存储它们吗?我是否应该设置一个符合 NSCoding 的 UIView 子类,只对数组进行编码和解码并将其存储在设备上?我应该考虑另一种方法吗?感谢您的任何建议。
【问题讨论】:
【参考方案1】:您可以创建一个实体来表示图像及其信息,并将核心数据的外部存储属性用于实体的属性。这样,您无需将图像实际存储在持久存储中即可获得核心数据的便利。
【讨论】:
我记得读过这方面的内容(例如***.com/questions/7924840/…),但是这样做的实现细节对我来说有点模糊。你知道有什么好的链接吗? 只是选中“允许外部存储”复选框的问题吗?因此,对于人们添加或删除图像时的所有维护,我仍然通过 CoreData API 进行调用? 核心数据会处理它。核心数据将图像存储在外部文件中,并在获取图像时为您完成后台工作。【参考方案2】:我最近不得不做出类似的决定,我决定将图像存储在 CoreData 中。我有一个名为 photo
的托管对象,其中包含一个名为 image
的二进制数据字段:
photo.image = UIImagePNGRepresentation(imageFile); // <- imageFile is a UIImage
我使用以下方法重新创建图像:
[UIImage imageWithData:self.image];
一个直接的好处是图像会随着对象自动删除,如果您已经查询了记录,则在检索图像时没有额外的开销。
【讨论】:
【参考方案3】:Core Data 对于你想做的事情来说可能是多余的。选择一些键值对来获取有关图像的描述性信息。一个键是“路径”,值是图像文件的路径(或只是它的名称)。您可以序列化字典数组(或集合)。
当您的应用启动时,读取序列化的字典数组。每次发生变化时,序列化并保存信息。编写一个简短的审核例程以确保字典和文件中的图像之间存在一对一的对应关系,如果其中一个或另一个丢失,则删除另一个(将处理您在更新某些内容或其他内容之前崩溃的情况)。
稍后您可以根据需要向字典中添加更多属性,甚至删除一些属性。
[PS:我在一个发布应用程序中为一个版本执行此操作,当信息需要变得相关时,我切换到 Core Data。]
【讨论】:
以上是关于存储 UIImages 的持久数组 - CoreData 还是在磁盘上?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages