我正在开发一个应用程序,需要将大约 100 张或更多图像与其他相关信息一起预先插入到核心数据数据库中。
现在,我只需编写几行代码就可以轻松添加其他数据,但对于 UIImages,我不确定如何在不编写大量代码的情况下做到这一点。我想知道:是否有办法轻松做到这一点,或者如果没有,以最少的努力实现这一目标的最佳方法是什么。
另外,是否可以将图像存储在 Core Data 数据库中,或者我们应该只将图像的地址保存在本地文件系统上?
在核心数据数据库中存储图像非常容易。您只需将图像属性标记为可转换属性并创建 NSValueTransformer 的子类即可。在该子类中,添加如下代码:
+ (Class)transformedValueClass
{
return [NSData class];
}
+ (BOOL)allowsReverseTransformation
{
return YES;
}
- (id)transformedValue:(id)value
{
if (value == nil)
return nil;
// I pass in raw data when generating the image, save that directly to the database
if ([value isKindOfClass:[NSData class]])
return value;
return UIImagePNGRepresentation((UIImage *)value);
}
- (id)reverseTransformedValue:(id)value
{
return [UIImage imageWithData:(NSData *)value];
}
对于可转换属性,请指定该子类的名称作为值转换器名称。
然后,您可以为托管此图像属性的实体创建一个 NSManagedObject 子类,并为此图像属性声明一个属性:
@property(nonatomic, retain) UIImage *thumbnailImage;
您可以从此属性读取 UIImage 或将 UIImage 写入此属性,它们将透明地更改为 NSData 或从 NSData 更改为存储在数据库中。
是否这样做取决于您的具体情况。较大的图像可能不应该以这种方式存储,或者至少应该在它们自己的实体中,以便在遵循与它们的关系之前它们不会被提取到内存中。小缩略图可能适合以这种方式放入数据库中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)