存储UIImages的持久数组 - CoreData还是在磁盘上?

时间:2013-02-26 21:05:11

标签: ios core-data uiimage nsarray

在我的应用程序中,我将拥有一组最多50张图像供人们维护。他们可以选择创建新图像或删除现有图像。每张图片都会有一些与之相关的内容,例如评分。

我的问题是如何存储它们。我应该创建一个名为“Image”的CoreData实体并以这种方式存储它们吗?我应该设置一个符合NSCoding的UIView子类,只是编码和解码数组并将其存储在设备上吗?还有其他方法我应该考虑吗?感谢您的任何建议。

3 个答案:

答案 0 :(得分:0)

您可以使用其信息创建表示图像的实体,并使用核心数据的外部存储属性作为实体的属性。这样,您就可以获得核心数据的便利,而无需将图像实际存储在持久存储中。

答案 1 :(得分:0)

最近我不得不做出类似的决定,我决定将图像存储在CoreData中。我有一个名为photo的托管对象,其中包含一个名为image的二进制数据字段:

photo.image = UIImagePNGRepresentation(imageFile); // <- imageFile is a UIImage

我使用以下方式重新创建图像:

[UIImage imageWithData:self.image];

一个直接的优势是图像会随对象自动删除,如果您已经查询过记录,则检索图像时不会有额外的开销。

答案 2 :(得分:0)

对于您想要做的事情,核心数据可能过度。选择一些键值对以获取有关图像的描述性信息。一个键是“path”,值将是图像文件的路径(或仅仅是其名称)。您可以序列化数组(或集)字典。

当您的应用启动时,请阅读序列化的词典数组。每次更改时,都会序列化并保存信息。编写一个简短的审计例程,以确保字典和文件中的图像之间存在一对一的对应关系,如果缺少一个或另一个,则删除另一个(将处理在更新某些内容或其他内容之前崩溃的情况) )。

稍后您可以根据需要为词典添加更多属性,甚至删除一些。

[PS:我在一个版本的运送应用程序中执行此操作,当需要成为关系的信息时,我切换到Core Data。]