Kann ich auf die Dateien zugreifen, die für externen Binärspeicher in Core Data verwendet werden?

10

Ich arbeite an einer Medien-DB-Anwendung. Ich habe ein benutzerdefiniertes Modell mit Datenspeicher und denke darüber nach, es in Core Data umzuschreiben. Ein Anwendungsfall, der für mich besonders interessant ist, ist der Filmspeicher. Ich speichere Filmdateien in der Datenbank, aber das Medien-Framework kann nur Filme von Dateien (keine Daten) lesen.

Core Data bietet eine praktische Funktion namens "external binary storage", bei der die Entitätsdaten nicht in der Datenbank, sondern in einer externen Datei gespeichert werden. Dies ist für den Core Data API-Benutzer transparent. Meine Frage ist, kann ich den Pfad zu der externen Datei erhalten, so dass ich einen Film mit Core Data speichern und dann einfach aus der externen Core Data-Datei laden konnte?

    
zoul 19.04.2012, 06:19
quelle

2 Antworten

3

Wenn Sie direkt auf die Daten zugreifen möchten (dh nicht über CoreData), sollten Sie besser jeder Datei eine UUID als Name geben und diesen Namen in der Datenbank speichern und die eigentliche Datei selbst speichern.

>

Wenn Sie UIManagedDocument verwenden, haben Sie mehrere Optionen. Mit der obigen Technik können Sie die Dateien neben der Datenbank speichern, da UIManagedDocument wirklich ein Dateipaket ist.

Alternativ können Sie eine Unterklasse von UIManagedDocument erstellen und die Methoden überschreiben, die das Lesen / Schreiben der "zusätzlichen" Dateien behandeln. Dadurch erhalten Sie Zugriff auf die Dateien selbst. Sie können dort festlegen, was Sie wollen, einschließlich der tatsächlichen URL zu der Datei, die CoreData automatisch erstellt.

%Vor%     
Jody Hagins 19.04.2012, 13:03
quelle
3

Ja, Sie können auf die Dateien im externen Speicher zugreifen. Es braucht ein wenig Hacking, und darf nicht komplett koscher mit Apples App Store sein, aber Sie können es einfach ziemlich tun.

>

Angenommen, wir haben eine NSManagedObject-Unterklasse "Media" mit einer Eigenschaft "data", die im Core Data Editor auf "Erlaube externen Speicher" gesetzt wurde:

%Vor%

Und eine handliche Dandy-NSString-Kategorie:

%Vor%

Jetzt ist es Zeit für etwas Magie .... Wir werden eine Category-Methode erstellen, die den Dateinamen aus der Zeichenfolge [data description] analysiert. Wenn Sie mit einer Instanz der Media-Unterklasse arbeiten, ist 'data' tatsächlich eine 'External Storage Reference', kein NSData-Objekt. Der Dateiname der tatsächlichen Daten wird in der Beschreibungszeichenfolge gespeichert.

%Vor%

Jetzt haben Sie einen NSString-Pfad und einen NSURL-Pfad zu der Datei. FREUDE !!!

Etwas zu beachten, ich hatte Probleme beim Laden von Filmen mit dieser Methode ... aber ich habe auch einen Workaround gefunden. Es sieht so aus, als würde MPMoviePlayer nicht auf die Dateien in diesem Verzeichnis zugreifen, also bestand die Lösung darin, die Datei vorübergehend in das Dokumentenverzeichnis zu kopieren und abzuspielen. Löschen Sie dann die temporäre Kopie, wenn ich meine Ansicht lade:

%Vor%

Viel Glück!

    
G. Shearer 21.11.2012 16:45
quelle

Tags und Links