Base de Données de Stockage d'Images (iPhone)
J'ai une application dans laquelle j'permettre à l'utilisateur d'ajouter une image pour leur compte.
Je souhaite savoir comment faire pour enregistrer une image (obtenu à partir de l'appareil photo ou de la bibliothèque) à l'aide de Données de Base, comme je l'ai peut offrir un centre de sauvegarde pour l'utilisateur et serait à la recherche de transférer les données d'image sur un serveur.
Je suis venu à travers la conception de la suggestion de la création d'un Image
modèle objet et de la création d'un 1-de-1 relation avec le User
modèle objet (de sorte que l'Image associée objet n'est pas appelé, sauf si requis). Cependant, je ne suis pas sûr comment pratiquement stocker l'image et si c'est potentiellement mortelle en termes de performances.
Je vous serais reconnaissant de tout conseil sur l'approche et les pièges de toute personne qui a tenté cette.
Vous devez vous connecter pour publier un commentaire.
La règle pour les données d'image sont stockées dans la Base de Données est comme suit:
Vous pouvez utiliser le transformables type de données à stocker les NSImage directement dans la Base de Données. En fait, vous pouvez utiliser le transformables type de données à stocker quoi que ce soit qui implémente l'NSCoder protocole.
Personnellement, je ne serait pas la convertir en une CGImageRef que vous pouvez perdre beaucoup d'information de cette façon.
Temps écoulé depuis que cette question a été posée mais j'ai envie de partager mon expérience au sujet de cette question.
Je ne vous recommanderais pas de stocker des images à l'intérieur de votre base de données si leur nombre n'est pas limité. Vous devez garder à l'esprit qu'un jour vous allez ajouter une nouvelle version du modèle de données et vous aurez à la migration de l'ancienne DB à une nouvelle Application mise à jour. Cela prend du temps. Le plus vous fichier DB est, plus il prend pour migrer.
Si vous voulez stocker les images en DB assurez-vous de ne pas ajouter un magasin persistant dans
application: didFinishLaunchingWithOptions:
méthode deUIApplicationDelegate
. iOS va mettre fin à votre application si la migration ne se termine pas dans les XX secondes.Piège: vous pouvez Vous retrouver énorme, difficile à gérer la base de données sqlite. Voulez-vous vraiment à vos utilisateurs de télécharger un fichier de plusieurs MO en une seule étape, pour le serveur? Que faites-vous, si le celluar sauts de connexion vers le bas pour quelques secondes?
Je pense qu'il serait mieux, si vous utilisez la Base de Données pour gestion de vos images et de leur téléchargement etat (téléchargé: oui ou non). De cette façon, vous pouvez télécharger les images, où il s'intègre dans votre application de flux de travail. Bon, ça va durer un peu plus longtemps, en raison du grand nombre de connexions. Mais c'est un nettoyant approche, je pense...
Quand vous pensez à propos d'iTunes, lorsque l'on parle de sauvegardes: Votre iPhone 'Documents' dossier est synchronisé de toute façon.
Vous devez disposer d'un d'un d'un, alors vous pouvez vous pourriez faire quelque chose comme ceci:
Où managedObject est votre base de données d'image de l'objet et @"données" est le nom de la propriété binaire. Vous pourriez aussi avoir besoin pour enregistrer le format de l'image pour désérialiser l'image plus tard.
Une autre option consiste à enregistrer l'image sur le disque et de stocker le chemin d'accès dans la base de données.