Хранить изображения в базе данных 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;
Вы можете читать UIImages из и записывать UIImages для этого свойства, и они будут прозрачно заменены на NSData и сохранены в базе данных.
Будет ли это делать, зависит от вашего конкретного случая. Большие изображения, вероятно, не должны храниться таким образом, или, по крайней мере, должны быть в их собственной сущности, чтобы они не загружались в память до тех пор, пока не будут соблюдены отношения с ними. Небольшие миниатюрные изображения, вероятно, можно поместить в вашу базу данных таким образом.