Je développe une application qui permet à l'utilisateur d'enregistrer des vidéos et des photos. Maintenant, je me demande quelle est la meilleure façon de les stocker?Stocker des photos et vidéos dans des données de base?
La première idée est bien sûr de l'enregistrer dans la photothèque de l'utilisateur, comme s'il avait enregistré la photo depuis l'application Appareil photo, et d'utiliser une référence aux fichiers. Maintenant, il y a le problème que l'utilisateur peut accéder et supprimer des fichiers de l'application Photos, qui peuvent être encore nécessaires par mon application. Je ne pense pas que je puisse empêcher l'utilisateur de supprimer des photos, mais comment faire face à l'incohérence de mon application?
L'autre façon serait de prendre soin du stockage moi-même. Mon application utilise déjà les données de base, donc je pourrais convertir les fichiers multimédias en utilisant un NSValueTransformer
en un objet NSData
et le stocker comme BLOB dans les données de base. Ensuite, il y a d'autres questions concernant la performance. Je sais qu'un Core Data basé sur SQLite peut parfaitement gérer des bases de données de plusieurs Go, mais le chargement de gros objets de données prendra quand même un peu de temps. L'avantage évident est que l'utilisateur ne va pas rendre mon application incohérente, mais la pénalité de performance est-elle acceptable? Et surtout: Si j'utilise un UIImagePickerController
pour capturer des photos et des vidéos, il va quand même l'enregistrer dans la bibliothèque. Pour l'enregistrer dans Core Data, je devrais prendre la photo à partir de là, la convertir en objet NSData
, l'enregistrer et la supprimer à nouveau de la bibliothèque. Cela ne semble pas être la bonne façon pour moi. En outre, UIKit me fournit une fonction pour obtenir un NSData
objet d'une photo via UIImageJPEGRepresentation()
, mais il ne semble pas y avoir une telle fonction pour la conversion de vidéos. Dans l'ensemble, en raison de toutes ces questions sans réponse, je voudrais utiliser la première approche. Mais le problème d'incohérence me laisse perplexe. Quelle est la meilleure pratique pour y faire face?
Voir ma réponse dans: http://stackoverflow.com/questions/10222632/can-i-access-the-files-used-for-external-binary-storage-in-core-data/13497992#13497992 I est venu avec une solution "créative" (si la meilleure pratique est anyones), mais cela vous permettra d'utiliser Core Data pour gérer vos fichiers tout en étant capable d'accéder aux fichiers ** REAL ** par leur chemin. –