Ich entwickle eine App, mit der der Benutzer Videos und Fotos aufnehmen kann. Jetzt frage ich mich, was ist der beste Weg, sie zu speichern?Speichern von Fotos und Videos in Core Data?
Die erste Idee ist natürlich, es in der Fotobibliothek des Benutzers zu speichern, als ob er das Foto von der Kamera-App aufgenommen und einen Verweis auf die Dateien verwendet hätte. Jetzt gibt es das Problem, dass der Benutzer auf Dateien aus der Anwendung "Fotos" zugreifen und diese löschen kann, die möglicherweise noch von meiner App benötigt werden. Ich glaube nicht, dass ich verhindern kann, dass der Nutzer Fotos löscht, aber wie gehe ich mit der Inkonsistenz meiner App um?
Der andere Weg wäre, mich selbst um die Lagerung zu kümmern. Meine App verwendet bereits Core Data, sodass ich die Mediendateien mit einem NSValueTransformer
in ein NSData
Objekt konvertieren und als BLOB in Core Data speichern kann. Dann gibt es noch einige Fragen bezüglich der Leistung. Ich weiß, dass ein SQLite-basiertes Core Data Datenbanken von mehreren GB Größe perfekt verarbeiten kann, aber das Laden großer Datenobjekte wird sowieso einige Zeit dauern. Der offensichtliche Vorteil ist, dass der Nutzer meine App nicht inkonsistent macht, aber ist die Leistung akzeptabel? Und vor allem: Wenn ich ein UIImagePickerController
verwende, um Fotos und Videos aufzunehmen, wird es trotzdem in der Bibliothek gespeichert. Um es in Core Data zu speichern, müsste ich das Foto von dort nehmen, es in ein NSData
Objekt umwandeln, es speichern und es wieder aus der Bibliothek löschen. Dies scheint nicht der richtige Weg zu mir zu sein. UIKit bietet mir auch eine Funktion, um ein NSData
Objekt von einem Foto über UIImageJPEGRepresentation()
zu bekommen, aber es scheint keine solche Funktion zum Konvertieren von Videos zu geben.
Alles in allem, wegen all dieser unbeantworteten Fragen möchte ich den ersten Ansatz verwenden. Aber das Inkonsistenzproblem verwirrt mich. Was ist die beste Vorgehensweise, um damit umzugehen?
Siehe meine Antwort in: http://stackoverflow.com/questions/10222632/can-access-the-files-user-for-external-binary-storage-in-core-data/13497992#13497992 I kam mit einer "kreativen" Lösung (ob es Best Practice ist anyones rate), aber es wird Ihnen erlauben, Core-Daten zu verwenden, um Ihre Dateien zu verwalten, während immer noch in der Lage, Zugriff auf die ** REAL ** -Dateien über ihren Pfad. –