Stocker des images dans une Base de Données de la base de données est très facile à faire. Vous avez juste besoin de marquer votre image en tant qu'attribut d'un transformable l'un et de créer une sous-classe de NSValueTransformer. À l'intérieur de cette sous-classe, ajoutez le code suivant:
+ (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];
}
Pour votre transformables attribut, spécifiez la présente sous-classe du nom que la Valeur du Transformateur de Nom.
Vous pouvez ensuite créer un NSManagedObject sous-classe de l'entité hébergeant cette image de l'attribut et de déclarer une propriété de cette image de l'attribut:
@property(nonatomic, retain) UIImage *thumbnailImage;
Vous pouvez lire UIImages et écrire UIImages à cette propriété, et ils seront en toute transparence changé vers et à partir de NSData être stockées dans la base de données.
De savoir si ou de ne pas faire cela dépend de votre cas particulier. De grandes images ne devraient probablement pas être stockés de cette manière, ou du moins devrait l'être dans leur propre entité afin qu'ils ne sont pas récupérées en mémoire jusqu'à ce qu'une relation est suivie. De petites vignettes sont probablement bien de mettre dans votre base de données de cette façon.