Wie initialisiere ich einen Store mit Standarddaten in einer CoreData-Anwendung?

7

Ich mache eine iPhone-Anwendung. In dieser App möchte ich nur eine Datenbank als eine nachgeschlagene Tabelle für Werte in meiner App verwendet werden. Das einzige, was die Datenbank tun wird, war, mir die Werte zu liefern, die ich benötigte, abhängig von der Abfrage des Programms. Es wird kein Hinzufügen oder Löschen in der Datenbank durchgeführt. Meine Frage war, wie initialisiere ich eine Standard-Daten für die Anwendung mit CoreData. So dass beim Programmstart bereits alle Werte benötigt wurden.

Wenn Sie andere Vorschläge haben, was besser ist oder was andere Alternativen sind, sagen Sie es mir bitte.

Danke.

    
edie 12.08.2009, 05:42
quelle

4 Antworten

12

Ich würde eine einfache Mac-Anwendung erstellen, ausgehend von der Vorlage für eine dokumentbasierte Core Data-Anwendung. Kopieren Sie Ihr vorhandenes .xcdatamodel-Objekt über das Standardmodell im Projekt (oder fügen Sie das neue Datenmodell hinzu und stellen Sie sicher, dass Sie an jeder Stelle umbenennen, die auf das Standardmodell verweist). Öffnen Sie die XIB-Datei für das Dokumentfenster im Interface Builder, und ziehen Sie das Element "Core Data Entity" aus dem Interface Builder-Bibliotheksinspektor hinein. Wählen Sie im daraufhin angezeigten Dialogfeld eine anzuzeigende Entität aus, und wählen Sie eine Schnittstelle aus, in der sie angezeigt werden soll.

Damit erstellen Sie eine voll funktionsfähige Oberfläche zum Hinzufügen, Entfernen oder Bearbeiten der Eigenschaften dieses Entitätstyps. Alles sollte über Cocoa Bindings verbunden sein, so dass Sie keine Codezeile schreiben müssen, damit dies funktioniert. Sie können auf diese Weise Schnittstellen für jeden Entitätstyp in Ihrem Modell hinzufügen.

Damit können Sie schnell Daten in einem Core Data-Dokument eingeben und bearbeiten, die Sie dann auf der Festplatte speichern und als Ressource zu Ihrer iPhone-Anwendung hinzufügen können. Die SQLite-Datenbankstrukturen sind vollständig kompatibel zwischen den Desktop- und iPhone Core Data-Implementierungen. Daher habe ich festgestellt, dass dies eine schnelle und einfache Methode zum Testen Ihres iPhone Core Data-Codes ist.

    
Brad Larson 12.08.2009 14:38
quelle
7

Bitte lesen Sie den Leitfaden zur Kerndaten-Programmierung, oder sehen Sie unten (vom PG kopieren):

" Wie initialisiere ich einen Laden mit Standarddaten?

Hier gibt es zwei Probleme: Erstellen der Daten und Sicherstellen, dass die Daten nur einmal importiert werden. Es gibt mehrere Möglichkeiten, die Daten zu erstellen.

  • Sie können einen separaten persistenten Speicher erstellen, der den Standardwert enthält Daten und enthalten den Speicher als eine Anwendungsressource. Wann du willst Um es zu verwenden, müssen Sie entweder das gesamte Geschäft in ein geeignetes kopieren Speicherort oder kopieren Sie die Objekte aus dem Standardspeicher in einen vorhandenen Geschäft. Bei kleinen Datensätzen können Sie die verwalteten Objekte erstellen direkt im Code.

  • Sie können eine Eigenschaftsliste - oder eine andere dateibasierte - erstellen Darstellung der Daten und speichert sie als Anwendungsressource. Wenn Sie es verwenden möchten, müssen Sie die Datei öffnen und die Datei analysieren Darstellung zum Erstellen von verwalteten Objekten.

Sie sollten diese Technik nicht unter iOS und nur dann verwenden, wenn dies unter Mac OS X unbedingt erforderlich ist. Das Parsen einer Datei zum Erstellen eines Speichers verursacht unnötigen Overhead. Es ist viel besser, einen Core Data Store selbst offline zu erstellen und direkt in Ihrer Anwendung zu verwenden. Es gibt auch mehrere Möglichkeiten, um sicherzustellen, dass die Standardwerte nur einmal importiert werden:

  • Wenn Sie iOS verwenden oder eine nicht dokumentenbasierte Anwendung für erstellen Mac OS X, können Sie eine Überprüfung beim Start der Anwendung hinzufügen, um zu bestimmen ob an dem von Ihnen angegebenen Speicherort eine Datei existiert Shop der Anwendung. Wenn dies nicht der Fall ist, müssen Sie die Daten importieren. Zum ein iOS-basiertes Beispiel, siehe CoreDataBooks.

  • Wenn Sie eine dokumentbasierte Anwendung mit NSPersistentDocument erstellen, initialisieren Sie sie Die Standardwerte in InitWithType: Fehler:.

  • Wenn es eine Möglichkeit gibt, dass der Speicher (also die Datei) sein könnte erstellt, aber die Daten nicht importiert, dann können Sie ein Metadaten-Flag hinzufügen Zum Geschäft. Sie können die Metadaten überprüfen (mit metadataForPersistentStoreWithURL: Fehler :) effizienter als Ausführen eines Fetch (und es erfordert nicht, dass Sie hart zu codieren Standard-Datenwerte).

"

Wie oben erwähnt, müssen wir im Allgemeinen einen vorgefüllten Standardspeicher mit Code erstellen und ihn dann als einen Standardspeicher verwenden Ressourcendatei, und kopieren Sie sie aus dem Ressourcenpaket in das Dokumentenverzeichnis, wenn die Coredata-Datei fehlt. Bitte durchsuchen Sie das CoreDataBooks-Codebeispiel in Ihrem Xcode Organizer (oder Apple Developer Center) und sehen Sie sich die - persistentStoreCoordinator-Methode - (NSPersistentStoreCoordinator *) an.

    
flypig 18.07.2012 14:33
quelle
1

Ich habe mir stundenlang den Kopf zerbrochen, um das Problem zu lösen. Ich habe einfach nicht die Datenbank gespeichert. Auf diese Weise wird es bei jedem Öffnen der App initialisiert. Wenn Sie es speichern, wird es weiterhin duplizieren.

    
Clifton Crawley 25.03.2012 06:22
quelle
0

Ich würde ein Tool schreiben, das eine Datenbank mit den gewünschten Daten füllt, die Datenbank zum Zeitpunkt der Erstellung generiert und sie in Ihren Ressourcenordner stopft. Wenn du nicht schreiben willst, kannst du es einfach dort lassen und direkt darauf zugreifen. Wenn du jemals darauf schreiben willst, musst du es irgendwo kopieren, wo du schreiben darfst (wie im Dokumentenordner).

    
Louis Gerbarg 12.08.2009 05:47
quelle

Tags und Links