Ich habe die Datenspeicherrichtlinien von Apple gelesen und bin wirklich verwirrt darüber, wo ich die sqlite-Datenbankdateien behalten soll, die ich in meiner App erstelle. Ich möchte die sqlite-Dateien auch dann lesen, wenn sich die App im Offfline-Modus befindet. Ich habe gelesen, dass solche Dateien in der Bibliothek/den Caches mit dem Flag "nicht sichern" gesetzt werden sollten. Bitte schlagen Sie mir den richtigen Ansatz vor, um das Gleiche zu tun.Sollte ich SQLite-Datenbank-Datei in Dokumente-Verzeichnis oder Bibliothek/Caches schreiben?
Antwort
Die Antwort hängt davon ab, wie Sie Ihre Datenbank-Dateien erstellt werden:
According to the Data Storage Guidelines page:
Nur Dokumente und andere Daten, die nutzergenerierte sind, oder dass sonst nicht von der Anwendung neu erstellt werden , sollte in das Verzeichnis/Documents gespeichert werden und automatisch von iCloud gesichert werden.
Daten, die erneut heruntergeladen oder neu generiert werden können, sollten im Verzeichnis/Library/Caches gespeichert werden. Beispiele für Dateien Sie sollten in das Caches-Verzeichnis enthalten Datenbank Cachedateien und herunterladbare Inhalte, wie sie von Magazin, Zeitung, und Kartenanwendungen verwendet werden.
Dies scheint relativ mir klar: Wenn Ihre App programmatisch etwas schafft oder erzeugt Daten, die Sie speichern möchten, setzen Sie es in den Ordner „Caches“. Wenn es etwas Einzigartiges ist, das der Kunde selbst generiert (indem er in eine Tastatur eintippt oder etwas, das er manuell interveniert und getan hat), legen Sie es in "Dokumente".
"Nicht sichern" bedeutet, dass die Dateien nie an iCloud gesendet werden und wenn sie verloren gehen, müssen sie von Grund auf neu erstellt werden (oder neu installieren).
Dies kann Ihnen helfen. Das Kopieren der Datenbank in das Dokumentenverzeichnis ist gut genug. Die Dateien im Bundle sind schreibgeschützt. In einigen Situationen Wenn Sie die Datenbank jederzeit aktualisieren müssen, ist es am besten, zuerst die Datenbank zu kopieren, wenn sie nicht im Dokumentenverzeichnis vorhanden ist.
Der Beispielcode zum Kopieren der Datenbank zu den Dokumenten Verzeichnis folgt:
-(void) checkAndCreateDatabase {
// Setup some globals
NSString *databaseName = @"AnimalDatabase.sql";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL success;
// Create a FileManager object, we will use this to check the status
// of the database and to copy it over if required
NSFileManager *fileManager = [NSFileManager defaultManager];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:databasePath];
// If the database already exists then return without doing anything
if(success) return;
// If not then proceed to copy the database from the application to the users filesystem
// Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
// Copy the database from the package to the users filesystem
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
[fileManager release];
}
Sie diese Tutorial Die Dateien verweisen kann, wird Inhalt auf Dokumentverzeichnis lesen, Modus schreiben, so dass Sie die Inhalte lesen können aus der Datenbank.
- 1. Sollte ich beitreten oder sollte ich UNION
- 2. Sollte ich meine Konstanten groß schreiben?
- 3. Wann sollte ich statische Methoden schreiben?
- 4. Sollte ich Tests schreiben, bevor sie kompilieren?
- 5. Sollte ich equals() Methoden in JPA-Entitäten schreiben?
- 6. Sollte ich MapView oder MapFragment
- 7. Sollte ich document.createDocumentFragment oder document.createElement
- 8. Datenbank in AngularJS verwenden - wo sollte ich DB-Verbindungscode schreiben?
- 9. Sollte ich Unterklasse NSManagedObject erstellen oder nicht?
- 10. Sollte ich angular2 oder @angular node_modules installieren?
- 11. Sollte ich WPF-Konverter oder Trigger verwenden?
- 12. Warum sollte (sollte ich nicht) ich meine neue Website in HTML 5 und CSS3 schreiben?
- 13. Wie viele Klassen sollte ich in eine Datei schreiben?
- 14. Sollte ich mehrere @ Return-Tags in Javadoc schreiben
- 15. Sollte ich Dateideskriptoren oder Streams zum Lesen/Schreiben in Sockets verwenden
- 16. Sollte ich ReAllocHGlobal oder FreeHGlobal/AllocHGlobal verwenden?
- 17. Wie sollte dieses Ergebnis in PHP schreiben?
- 18. Wann sollte ich ein Linux-Kernel-Modul schreiben?
- 19. Wie viele Komponententests sollte ich pro Funktion/Methode schreiben?
- 20. Wie sollte ich mit dem Schreiben von Gerätetreibern beginnen?
- 21. Sollte ich Konstruktornamen für meine Klassen groß schreiben?
- 22. Sollte ich Express.js oder Sails.js lernen?
- 23. Sollte ich Threads oder mehrere Prozesse verwenden?
- 24. Was ich wählen sollte - JSON oder SQLite?
- 25. Sollte ich Int oder UInt16 verwenden?
- 26. Warum kann ich in Java nicht i ++++ oder (i ++) ++ schreiben?
- 27. LINQ, sollte ich oder verschachtelte SELECT NEW's
- 28. Sollte ich em oder px verwenden?
- 29. Sollte ich cURL schließen oder nicht?
- 30. Sollte ich Rails Tests mit dem def oder test Keyword schreiben?
Ich habe eine App vollständig statisch entwickelt. Ich speichere Daten mit mehr als 4 MB Größe. Ohne diesen Inhalt wird die App nicht funktionieren. In meinem Fall wo sollte ich die lokale Datenbank speichern (Dokumente Ordner oder Bibliotheksordner) – Warrior
[Nun, ich sehe, Sie haben dies bereits als eine separate Frage] (http://stackoverflow.com/questions/16767861/where-to- save-the-local-db-erstellt-für-iphone-app), also werde ich (oder jemand anders) die Antwort für dich nachschlagen –
Was ist mit neuen Erweiterungen und Watch? –