在我的应用程序中,我将拥有一组最多50张图像供人们维护。他们可以选择创建新图像或删除现有图像。每张图片都会有一些与之相关的内容,例如评分。
我的问题是如何存储它们。我应该创建一个名为“Image”的CoreData实体并以这种方式存储它们吗?我应该设置一个符合NSCoding的UIView子类,只是编码和解码数组并将其存储在设备上吗?还有其他方法我应该考虑吗?感谢您的任何建议。
答案 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。]