iOS - 将图像数组保存到 CoreData

Posted

技术标签:

【中文标题】iOS - 将图像数组保存到 CoreData【英文标题】:iOS - save an array of images to CoreData 【发布时间】:2012-09-07 02:56:29 【问题描述】:

我有一个 UIImages 数组,我想存储它们以方便以后访问。根据我的阅读,我应该将 Core Data 中的引用和图像保存到磁盘。我在我的实体上创建了一个 userImages 属性并将其设置为 Transformable,我的图像数组称为 userImages。

下一步是做这样的事情:

NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"itemId=%@",3]];

item = [[context executeFetchRequest:request error:&error] lastObject];

if (error) 
    NSLog(@"error with request");


//Update the object
item.userImages = someArrayOfImageReferences;

error = nil;
if (![context save:&error]) 
    NSLog(@"error");

但是我该如何构造 someArrayOfImageReferences 呢?我是否必须创建另一个任意图像名称数组,如 image1.png、image2.png 等?似乎应该有更好的方法。

【问题讨论】:

如果您将它们保存到磁盘,您肯定已经在某个地方找到了它们的名字吗?如果没有,那么在保存图像时,应该将路径存储在一个数组中,以便以后需要从磁盘读取它们时(在从核心数据加载文件名之后)再次找到它们。 【参考方案1】:

图像集实际上不是 Core Data 中的 Array,而是应该由 NSSet 提供。只需将您的对象指针从您的数组复制到一个新的 NSSet 中,您就可以了。

即使图像都有文件名,不要使用那些。更好的方法是动态生成名称,至少供内部使用。当然,如有必要,您可以保留面向用户的名称。对于您的内部名称,请使用基于 GUID 的名称,该名称可以动态生成,或者可能基于当前系统时间。 (请务必检查现有文件并相应调整名称,以防用户更改系统时间。)

【讨论】:

Core Data 不支持 NSArray。相反,它的本机数据类型是 NSSet 和 ios 5 NSOrderedSet。不太确定这里会有什么不同。

以上是关于iOS - 将图像数组保存到 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

PCL将图像文件保存到本地文件系统

将图像保存到默认相机文件夹 - IOS

在 PowerShell 中调整字节数组图像的大小

C++如何把位图保存到数组中

如何避免将从相机胶卷中挑选的图像保存到相机胶卷? [iOS]

将相机捕获的图像保存到ios中的文档目录中[重复]