Juste une suppose: je fais un attribut et fais de son type "binaire". Mais à la fin, comment j'utiliserais ça? Je suppose qu'il y a une nsdata dans les coulisses? Donc, cet attribut prend réellement une NSDATA? P>
3 Réponses :
C'est correct, utilisez binaire qui est représenté comme objet NSData, vous pouvez utiliser UIIMages ImageWithData Class Méthode afin de récupérer vos images. P>
Cette question a été posée à plusieurs reprises et la réponse est un peu plus complexe. P>
En ce qui concerne les données binaires, vous devez déterminer comment le stocker en fonction de la taille attendue des données avec laquelle vous travaillerez. La règle est: p>
De plus, lorsque vous stockez des images, il est recommandé de les stocker dans un format standard tel que JPG ou PNG. En utilisant le type de propriété transformable, vous pouvez réellement avoir votre sous-classe donner l'apparition d'accéder à la classe code> uIImage code> lorsque le magasin réel est une représentation PNG. Je vais dans cela en détail dans le pool-poste sur Cocoa est ma petite amie . P>
La raison derrière la conservation des données binaires 1M sur le disque est en raison du cache. Le NSPersistentStorecoordinator code> conservera un cache de données de sorte que lorsque votre application demande l'objet "Suivant", il n'a pas besoin de revenir sur le disque. Ce cache fonctionne
Quel est le raisonnement derrière le stockage d'images de plus de 1 m sur le disque au lieu des données de base?
Excellent article sur CIMG. Merci!
Merci pour ces conseils et le système de portabilité de données de base. Si vous êtes toujours là, puis-je demander, que voulez-vous dire par "Table principale" vs. Tableau auxiliaire "?
La personne dans une application d'adresses serait une table / entité principale. L'image pourrait être une table auxiliaire qui n'est pas directement accessible et n'est accessible qu'en référence à une personne.
Vous dites, stockez-le comme une propriété binaire, mais pourquoi ne pas la stocker comme transformable?
Le troisième paragraphe dit d'utiliser le type de propriété transformable, mais vous souhaitez stocker le binaire vous-même au lieu de simplement sérialiser l'uImage. En le stockant en tant que PNG / JPEG, vous rendez les données lisibles par tout ce qui peut lire le magasin (SQLite est fréquent par exemple) plutôt que de simplement atteindre l'objectif-c.
La réponse de Marcus fonctionne, mais ce n'est pas le moyen facile - et, Afaict, ce n'est pas la façon dont Apple "a l'intention" de le faire. En théorie, vous devriez pouvoir simplement marquer l'image comme "transformable" et CD ferait tout automatiquement.
qui ne fonctionne pas car l'uImage est "manquant" la mise en œuvre de NSCODING - le système de sérialisation d'Apple - et donc Transformateur par défaut du CD ne contient aucune idée de savoir comment enregistrer une image. P>
L'alternative, qui nécessite un petit code, mais est toujours plus simple que l'approche de Marcus ... vous aurait rencontré des bugs d'Apple. La mise en œuvre de Coredata d'Apple (prétendument) a été brisée depuis 2008 - les transformateurs personnalisés sont ignorés pour tout magasin de données de type "binaire". P>
retour sur "CD ferait tout automatiquement, si seulement uiimage était configuré Droite "... IMHO, UIIMAGE doit être sérialisable, même si la sérialisation" Par défaut "n'est pas idéale pour tous les cas. Si vous résolvez cela, alors lo et voici ... Coredata commence à enregistrer / lâcher les cas d'uiImage avec codage zéro de votre part. P>
Voici le code pour faire vos instances uImage toutes sérialisables. Tout ce que vous avez à faire est d'importer cette catégorie / Copy Coller cette catégorie dans les classes où vous souhaitez la version UIImage "mise à niveau". P>
@implementation UIImage (MyCategory) - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeDataObject:UIImagePNGRepresentation(self)]; } - (id)initWithCoder:(NSCoder *)decoder { NSData *data = [[decoder decodeDataObject] retain]; return [[UIImage alloc] initWithData:data]; } @end